当前位置: 首页 > 后端技术 > Python

Django中间件基本用法详解_0

时间:2023-03-25 22:35:52 Python

优秀程序员Python培训Django中间件基本用法详解,首先django中间件可以在执行视图功能之前执行,比如登录验证,日志记录等,下面简单介绍一下中间件的基本用法。1、在django项目文件夹下创建一个文件夹,用于存放中间件函数。文件夹的名称可以自定义。本文使用utils作为文件夹名称。2.在utils文件夹下创建一个中间件py文件,比如用于登录认证中间件loginCheck.pyfromdjango.httpimportHttpResponseRedirectfromdjango.utils.deprecationimportMiddlewareMixinclassUserLoginCheck(MiddlewareMixin):'''登录验证中间件'''defprocess_request(self,request):#userrequestpathbeforerequest=['/login/','/logout/']#不需要登录检测的urlifrequest.pathinpath:returnuserinfoSession=request.session.get('userinfo')ifnotuserinfoSession:returnHttpResponseRedirect('/login/')return3.配置中间件在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','util.sUserLoginCheck',#this是一个自定义的中间件】扩展中间件可以定义五个方法请求预处理函数:process_request(self,request)该方法在Django收到请求后调用,但是还没有解析URL来判断应该运行什么视图函数Django在方法中将相应的Request对象传递给它进行修改。如果返回None,Django会继续处理请求,执行后续的中间件,然后调用相应的视图。如果返回了HttpResponse对象,Django将不再执行process_response和对应视图之外的任何中间件,Django会立即返回HttpResponse。视图预处理函数:process_view(self,request,callback,callback_args,callback_kwargs)在Django执行请求预处理函数并确定要执行的视图(即回调参数)之后,视图函数真正执行之前调用.请求:HttpRequest对象。回调:Django将调用以处理请求的python函数。这是实际的函数对象本身,而不是字符串表示的函数名称。args:将传递给视图的位置参数列表,不包括请求参数(通常是传递给视图的第一个参数)。kwargs:将传递给视图的关键字参数字典。process_view()应该返回None或一个HttpResponse对象。如果返回None,Django会继续处理请求,执行后续的中间件,然后调用相应的视图。如果返回了HttpResponse对象,Django将不再执行任何其他中间件(无论类型)和对应的视图,Django会立即返回。Template模板渲染函数:process_template_response()默认不执行,只有当视图函数的返回结果对象中有render方法时才会执行,并将该对象的render方法的返回值返回给用户(注意不是返回视图函数的返回结果,而是返回视图函数返回值(object)中rende方法的结果)异常后处理函数:process_exception(self,request,exception)这个方法只是当请求处理过程中出现问题并且视图函数抛出错误时仅在捕获到异常时调用。此挂钩可用于发送错误通知、将上下文相关信息输出到日志文件,甚至尝试自动从错误中恢复。该函数的参数除了通常的请求对象外,还包括视图函数抛出的实际异常对象异常。process_exception()应该返回None或一个HttpResponse对象。如果返回None,Django会使用框架内置的异常处理机制继续处理相应的请求。如果返回一个HttpResponse对象,Django将使用该响应对象,使框架的内置异常处理机制短路。响应后处理函数:process_response(self,request,response)该方法在Django执行视图函数并产生响应后调用。该处理程序可以修改响应的内容;一个常见的用途是内容压缩,例如对请求的HTML页面进行gzip压缩。这个方法的参数比较直观:request是请求对象,response是视图返回的响应对象。process_response()必须返回一个HttpResponse对象。这个响应对象可以是传入函数的原始对象(通常是经过修改的),也可以是新生成的。