如何使用Django中间件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强> 1。在django项目文件夹下创建一个用于存放中间件函数的文件夹强>
文件夹的名字可自定义,本文使用跑龙套作为文件夹名
<强> 2。在跑龙套文件夹中创建中间件py文件强>
如用于登陆验证的中间件loginCheck。py
得到django.http import HttpResponseRedirect 得到django.utils.deprecation import  MiddlewareMixin class UserLoginCheck (MiddlewareMixin): & # 39;才能& # 39;& # 39; 登才能录验证中间件 & # 39;才能& # 39;& # 39; def 才能process_request(自我,,请求): ,,,#,用户请求请求前 ,,,path =,(& # 39;/登录/& # 39;,,& # 39;/注销/& # 39;],#,不需要进行登录检测的url ,,,if request.path 拷贝路径: ,,,,,回来 ,,,userinfoSession =, request.session.get(& # 39;用户信息# 39;) ,,,if not userinfoSession: ,,,,,return HttpResponseRedirect(& # 39;/登录/& # 39;) ,,,返回
<强> 3。配置使用中间件强>
在设置。py文件中配置中间件
MIDDLEWARE =, ( & # 39;才能django.middleware.security.SecurityMiddleware& # 39; & # 39;才能django.contrib.sessions.middleware.SessionMiddleware& # 39; & # 39;才能django.middleware.common.CommonMiddleware& # 39; & # 39;才能django.middleware.csrf.CsrfViewMiddleware& # 39; & # 39;才能django.contrib.auth.middleware.AuthenticationMiddleware& # 39; & # 39;才能django.contrib.messages.middleware.MessageMiddleware& # 39; & # 39;才能django.middleware.clickjacking.XFrameOptionsMiddleware& # 39; & # 39;才能utils.loginCheck.UserLoginCheck& # 39;,, #,此处为自定义的中间件 ]
<强>扩展
强>
<强>中间件可定义的五种方法强>
<强>请求预处理函数:process_request(自我,请求)强>
- <李>
这个方法的调用时机在Django接收到请求之后,但仍未解析URL以确定应当运行的视图函数.Django向它传入相应的请求对象,以便在方法中修改。
李> <李>如果返回没有,Django将继续处理这个请求,执行后续的中间件,然后调用相应的观点。
李> <李>如果返回HttpResponse对象,Django将不再执行任何除了process_response以外其它的中间件以及相应的观点,Django将立即返回该HttpResponse。
李><强>视图预处理函数:process_view(自我,请求,回调,callback_args callback_kwargs) 强>
- <李>
这个方法的调用时机在Django执行完请求预处理函数并确定待执行的观点(即回调参数)之后,但在视图函数实际执行之前。
李> <李>请求:HttpRequest对象。
李> <李>回调:Django将调用的处理请求的python函数。这是实际的函数对象本身,而不是字符串表述的函数名。
李> <李>参数:将传入视图的位置参数列表,但不包括请求参数(它通常是传入视图的第一个参数)。
李> <李>kwargs:将传入视图的关键字参数字典。
李> <李>process_view()应当返回没有或HttpResponse对象。如果返回没有,Django将继续处理这个请求,执行后续的中间件,然后调用相应的观点。
李> <李>如果返回HttpResponse对象,Django将不再执行任何其它的中间件(不论种类)以及相应的观点,Django将立即返回。
李><强>模板模版渲染函数:process_template_response() 强>
默认不执行,只有在视图函数的返回结果对象中有渲染方法才会执行,并把对象的渲染方法的返回值返回给用户(注意不返回视图函数的返回的结果了,而是返回视图函数返回值(对象)中仁德方法的结果)
<强>异常后处理函数:process_exception(自我,请求,例外)强>
- <李>
这个方法只有在请求处理过程中出了问题并且视图函数抛出了一个未捕获的异常时才会被调用。这个钩子可以用来发送错误通知,将现场相关信息输出到日志文件,或者甚至尝试从错误中自动恢复。
李> <李>这个函数的参数除了一贯的请求对象之外,还包括视图函数抛出的实际的异常对象例外。
李> <李>process_exception()应当返回没有或HttpResponse对象。
李> <李>如果返回没有,Django将用框架内置的异常处理机制继续处理相应的请求。
李>