创建中间件
MIDDLEWARE = [
# 自定义 在 对应app内创建一个 my_middleware.py 然后路径填写进来即可
]
常用两中间件process_request
& process_response
from django.utils.deprecation import MiddlewareMixin
# 导入中间件模块
class MD1(MiddlewareMixin):
# 接收到客户端信息后立即执行(视图函数之前)
def process_request(self, request):
print("MD1里面的 process_request")
# 返回到客户端信息前最后执行(视图函数之后)
def process_response(self, request, response):
print("MD1里面的 process_response")
return response
process_view 四个参数
'''
process_view(self, request, view_func, view_args, view_kwargs)
request是HttpRequest对象。
view_func是Django即将使用的视图函数。 (它是实际的函数对象,而不是函数的名称作为字符串。)
view_args是将传递给视图的位置参数的列表.
view_kwargs是将传递给视图的关键字参数的字典。 view_args和view_kwargs都不包含第一个视图参数(request)。
'''
process_exception
视图函数出错时执行
process_exception(self, request, exception)
该方法两个参数:
一个HttpRequest对象
一个exception是视图函数异常产生的Exception对象。
应用场景
做IP访问频率限制
URL访问过滤(没登陆就要登陆才能访问)
如果用户访问login则放过,其他也没检测是不是有session,已经有了放过,没有放回login
实例(访问过滤)
setting.py
MIDDLEWARE = [
# 自定义 在 对应app内创建一个 my_middleware.py 然后路径填写进来即可
'app01.my_middleware.AuthMiddleware',
]
# 白名单路径,不需要做登陆就能访问的页面
WHITE_LIST = ['/login/', '/reg/', '/logout/']
my_middleware.py
from django.utils.deprecation import MiddlewareMixin # 导入中间间模块
from django.shortcuts import redirect # 返回页面模块
from middlewareDemo import settings # 导入白名单
class AuthMiddleware(MiddlewareMixin): # 认证中间件
def process_request(self, request):
white_list = settings.WHITE_LIST
if request.path in white_list:
return None # 如果是白名单的路径,直接跳过
if not request.user.is_authenticated: # 获取用户是否登陆
return redirect('/login/')