赞
踩
django 3.2.13
原理:详细过程请阅读本专栏的第二篇Python Django源码运行过程的一、3.中间件的执行
中间件函数:
默认启用的中间件:
文档:中文官方文档
注意:下面说了大部分的参数,如果要全面请查看官方文档
配置参数(应用于setting.py):
SECURE_CONTENT_TYPE_NOSNIFF # 默认为True
:设置回复的header为X-Content-Type-Options: nosniff
(避免浏览器根据内容猜测并且覆盖Content-Type,使得用户上传的恶意代码被运行)解释: HTTP 严格传输安全:要求浏览器遇到该表头内容的,必须使用https方法,拒绝http请求该网站
SECURE_HSTS_SECONDS # 默认为False,其负责设置max-age(单位为秒)
:其应用于HTTP 严格传输安全,设置回复的header为Strict-Transport-Security:max-age=2592000
(当设置SECURE_HSTS_SECONDS
时才会启用该表头)SECURE_HSTS_INCLUDE_SUBDOMAINS #默认为False
:前提要设置SECURE_HSTS_SECONDS
,其应用于HTTP 严格传输安全,设置回复的header为Strict-Transport-Security:max-age=2592000;includeSubDomains
表示所有子域都遵守该规定SECURE_HSTS_PRELOAD# 默认为False
:前提要设置SECURE_HSTS_SECONDS
,其应用于HTTP 严格传输安全,设置回复的header为Strict-Transport-Security:max-age=2592000;includeSubDomains;preload
表示希望将你的网站提交到 浏览器预加载列表(需要单独填表格申请)解释: referrer-policy:头设置,该内容主要是用来设置请求referrer 请求头(是否发送完整的请求,不发送,还是主发送主域名),默认为same-origin
SECURE_REFERRER_POLICY
:用来设置referrer-policy原理:
process_request()
方法生成SessionStore实例,并赋给request.session, sever可以通过请求中传入的session_key,获得session内容,或者进行赋值,并且保存到session_cache 缓存中。process_response()
主要是为第一次请求生成session_key, 并且将session_cache 缓存中的内容进行持久化存储。配置参数(应用于setting.py):
SESSION_COOKIE_AGE
默认: 1209600 (2 周,以秒为单位),会话 cookie 的寿命,以秒为单位
SESSION_COOKIE_HTTPONLY
默认: True,是否对会话 cookie 使用 HttpOnly 标志。如果设置为 True,客户端的 JavaScript 将无法访问会话 cookie
SESSION_COOKIE_NAME
默认: ‘sessionid’,用于会话的 cookie 的名称。这可以是任何你想要的(只要它与你的应用程序中的其他 cookie 名称不同)
SESSION_COOKIE_SECURE
默认:False,是否对会话 cookie 使用安全 cookie。如果设置为 True,cookie 将被标记为“安全”,这意味着浏览器可以确保 cookie 只在 HTTPS 连接下发送。
关闭这个配置并不是一个好主意,因为攻击者可以用数据包嗅探器捕获一个未加密的会话 cookie,并使用 cookie 来劫持用户的会话
SESSION_ENGINE
默认: ‘django.contrib.sessions.backends.db’
控制 Django 存储会话数据的地方。包括的引擎有:
django.contrib.sessions.backends.db #数据库
django.contrib.sessions.backends.file #文件
django.contrib.sessions.backends.cache #缓存
django.contrib.sessions.backends.cached_db #缓存加数据库双重
django.contrib.sessions.backends.signed_cookies # session加密写到cookie
ESSION_FILE_PATH
默认: None,如果你使用的是基于文件的会话存储,那么这个选项设置了 Django 存储会话数据的目录,当使用默认值(None)时,Django 将使用系统的标准临时目录
解释:可以禁止某些User-Agent,改写url,不如127.0.0.1/a
自动补充为127.0.0.1/a/
等等
解释:通过在 POST 表单中添加隐藏的表单字段,并检查请求的正确值,增加对跨站点伪造请求的保护
解释:
配置参数(应用于setting.py):
AUTHENTICATION_BACKENDS
默认: [‘django.contrib.auth.backends.ModelBackend’],当试图认证用户时,要使用的认证后端类(字符串)列表AUTH_USER_MODEL
默认: ‘auth.User’,用来表示用户的模型PASSWORD_RESET_TIMEOUT
默认: 259200 (3 天,以秒为单位)密码重置链接的有效秒数。 PASSWORD_HASHERS
Django加密密码的方法,有四种默认解释:类似于flask的flash,使用场景:比如用户登录,然后通过后端模板进行一个信息反馈
解释:防止点击劫持,即禁止加载本网页的frame
process_request()
有一个参数,是request。它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,交给下一个中间件处理,如果是HttpResponse对象,Django将不向下执行,直接返回process_view()有四个参数
view_func.__name__获取其名字
process_exception()
有两个参数:一个是request,一个exception是视图函数异常产生的Exception对象。process_response()
有两个参数,一个是request,一个是response,response是视图函数返回的HttpResponse对象。该方法的返回值也必须是HttpResponse对象。process_template_response()
有两个参数,一个HttpRequest对象,response是TemplateResponse对象实例:
views.py
from django.utils.deprecation import MiddlewareMixin
class GaoMiddleware(MiddlewareMixin):
def process_request(self, request):
print("process_request")
def process_response(self, request, response):
print("process_response")
return response
def process_view(self, request, view_func, view_args, view_kwargs):
print(view_func, view_func.__name__)
print(view_args,view_kwargs,'00000000000000')
setting.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'testWeb.views.GaoMiddleware' # app的名称.中间件写在的文件名.中间件类名
]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。