作者:爱编程的小贤
⛳知识点:Django–中间件
:每天学一点,早日成大佬
今天我们进入Django中间件的学习啦!!! 看完这一篇让你对中间件印象深刻 学习之前先要好好复习回顾前面的内容哦!!!
如果你看完感觉对你有帮助,,,欢迎给个三连哦!!!您的支持是我创作的动力。 感谢感谢!!!
Django中的中间件:
django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
1. django.middleware.security.SecurityMiddleware
做了一些安全处理的中间件。比如设置XSS防御的请求头,比如做了http协议转为https协议的工作等。
2. django.contrib.sessions.middleware.SessionMiddleware
session中间件。会给request添加一个处理好的session对象。
3. django.middleware.common.CommonMiddleware
通用中间件,会处理一些URL,比如baidu.com会自动的处理成www.baidu.com。比如/blog/111会处理成/blog/111/自动加上反斜杠。
4. django.middleware.csrf.CsrfViewMiddleware
保护中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。SessionMiddleware必须出现在CsrfMiddleware之前。
5. django.contrib.auth.middleware.AuthenticationMiddleware
用户授权中间件。会给request添加一个user对象的中间件。该中间件必须在sessionmiddleware后面。
6. django.contrib.messages.middleware.MessageMiddleware
消息处理中间件。为了在多个模板中可以使用我们返回给模板的变量,并且简化操作。
7. django.middleware.clickjacking.XFrameOptionsMiddleware
防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。
中间件的定义方法:
①定义一个中间件工厂函数,然后返回一个可以被调用的中间件。
②中间件工厂函数需要接收一个可以调用的get_response对象。
③返回的中间件也是一个可以被调用的对象,并且像视图一样需要接受一个request对象参数,返回一个response对象。
step1:在子应用新建一个py文件middleware1用于定义中间件。
step2:在该新建的py文件中定义中间件
step3:在settings文件中将自定义的中间件注册。格式:'子应用名.中间件py文件名.外函数名’即中间件的python路径
具体格式:
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
response = get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
return middleware
#定义好中间件后,需要在settings.py 文件中添加注册中间件
MIDDLEWARE = [
*****
'users.middleware.my_middleware', # 添加中间件
]
def MyMiddleware1(get_response): # 接收响应对象
print('MyMiddleware1 is used') # 此处代码在项目启动时会执行,也就是在加载配置文件的时候调用的
def wrapper(request): # 接收请求对象
print('---------1---------')
print('请求路径:%s' % request.path) # 内部函数中,此处之前(包括此处的代码)的代码在视图处理前调用
response = get_response(request) # 视图, 响应对象
# response指向的视图是哪一个视图,取决于请求的路径路由指定的视图是哪一个视图
response.set_cookie('Xiaoxian', 'dashuaibi', max_age=999)
print(response) # 以下代码在视图处理后调用
print(type(response))
print('--------2---------')
return response
return wrapper
在请求视图被处理前:中间件由上至下依次执行
在请求视图被处理后:中间件由下至上依次执行
类似递归顺序
如果中间件的位置并不在中间件列表的最后一位的话,此时response指向的就是下一个中间件,
如果中间件位于中间件列表中的最后一位,此时response指向的就是访问的视图
Django中间件到这里我们就讲完啦!!!! 如果有帮到你欢迎给个三连支持一下哦❤️ ❤️ ❤️
如果有哪些需要修改的地方欢迎指正啦!!!一起加油啦