当前位置: 首页 / 技术分享 / 正文
Django中间件基础用法详解-好程序员Python培训

2020-09-30

Python培训 Django

  好程序员Python培训Django中间件基础用法详解,首先django的中间件可以在视图函数执行前执行,比如登陆验证、日志记录等,下面简单说明一下中间件的基础用法吧。

Python2

1.django项目文件夹下创建一个用于存放中间件函数的文件夹

 

文件夹的名字可自定义,本文使用utils作为文件夹名

 

2.utils文件夹中创建中间件py文件

 

如用于登陆验证的中间件loginCheck.py

 

from django.http import HttpResponseRedirect

from django.utils.deprecation import MiddlewareMixin

 

class UserLoginCheck(MiddlewareMixin):

  '''

  登录验证中间件

  '''

  def process_request(self, request):

    # 用户request请求前

    path = ['/login/', '/logout/'] # 不需要进行登录检测的url

    if request.path in path:

      return

 

    userinfoSession = request.session.get('userinfo')

    if not userinfoSession:

      return HttpResponseRedirect('/login/')

    return

 

3.配置使用中间件

 

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',

  'utils.loginCheck.UserLoginCheck', # 此处为自定义的中间件

]

 

扩展

 

中间件可定义的五种方法

 

Request预处理函数:process_request(self,request)

 

这个方法的调用时机在Django接收到request之后,但仍未解析URL以确定应当运行的视图函数。Django向它传入相应的Request对象,以便在方法中修改。

 

如果返回NoneDjango将继续处理这个request,执行后续的中间件,然后调用相应的view

 

如果返回HttpResponse对象,Django将不再执行任何除了process_response以外其它的中间件以及相应的viewDjango将立即返回该HttpResponse

 

View预处理函数:process_view(self,request,callback,callback_args,callback_kwargs)

 

这个方法的调用时机在Django执行完request预处理函数并确定待执行的view(即callback参数)之后,但在view函数实际执行之前。

 

requestHttpRequest对象。

 

callbackDjango将调用的处理requestpython函数.这是实际的函数对象本身,而不是字符串表述的函数名。

 

args:将传入view的位置参数列表,但不包括request参数(它通常是传入view的diyi个参数)

 

kwargs:将传入view的关键字参数字典。

 

process_view()应当返回NoneHttpResponse对象。如果返回NoneDjango将继续处理这个request,执行后续的中间件,然后调用相应的view

 

如果返回HttpResponse对象,Django将不再执行任何其它的中间件(不论种类)以及相应的viewDjango将立即返回。

 

Template模版渲染函数:process_template_response()

 

默认不执行,只有在视图函数的返回结果对象中有render方法才会执行,并把对象的render方法的返回值返回给用户(注意不返回视图函数的return的结果了,而是返回视图函数return值(对象)中rende方法的结果)

 

Exception后处理函数:process_exception(self,request,exception)

 

这个方法只有在request处理过程中出了问题并且view函数抛出了一个未捕获的异常时才会被调用。这个钩子可以用来发送错误通知,将现场相关信息输出到日志文件,或者甚至尝试从错误中自动恢复。

 

这个函数的参数除了一贯的request对象之外,还包括view函数抛出的实际的异常对象exception

 

process_exception()应当返回NoneHttpResponse对象。

 

如果返回NoneDjango将用框架内置的异常处理机制继续处理相应request

 

如果返回HttpResponse对象,Django将使用该response对象,而短路框架内置的异常处理机制。

 

Response后处理函数:process_response(self,request,response)

 

这个方法的调用时机在Django执行view函数并生成response之后。

 

该处理器能修改response的内容;一个常见的用途是内容压缩,如gzip所请求的HTML页面。

 

这个方法的参数相当直观:requestrequest对象,而response则是从view中返回的response对象。

 

process_response()必须返回HttpResponse对象.这个response对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。

 

  以上就是关于好程序员Python培训Django中间件基础用法详解的全部内容,希望对大家的学习有所帮助,最后想要了解更多关于Python和人工智能方面内容的小伙伴,请关注好程序员Python培训官网、微信公众号。

分享: 更多

上一篇:For循环用法详解-好程序员Python培训

下一篇:

好程序员公众号

  • · 剖析行业发展趋势
  • · 分享大厂面试心得
  • · 汇聚企业项目源码
  • · 下载全套高精尖教程

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    预约报名
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    预约报名

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
在线咨询
免费试听
入学教程
立即报名

Copyright 2011-2020 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公安网11010802011455号