djnago中间件

Posted littlesky1124

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了djnago中间件相关的知识,希望对你有一定的参考价值。

前言

  在form表单中当我们提交表单时会有这样的错误>>>>请求post时候的会出现403 forbidden,那我们就说说这个类中间件,(csrf只是中间件的一种)

  以前我们说用户请求来了,先到urls匹配对应的视图函数,视图函数拿到模板和数据库的数据返回给用户,其实不是怎样的,中间

还经过了中间件,那先下面我们来做一下。

 

请求的流程

技术分享图片

  注:  看图,就是说用户发来请求其实是先经过每一个中间件,>>  到URL    >>> 匹配对应的视图函数  >> 视图函数拿到模板和数据库的数据 .>>>  返回给中间件   >>>>   返回给用户

 

自定义中间件

   第一 ,在工程目录下创建一个新目录,新目录里面创建.py文件,在py文件中写类,这个继承中间件的类,如图

技术分享图片

 

 第二,写你指定义的类需要干什么事。这里只是显示打印出一个请求过程的流程,

技术分享图片

 

 第三,在setting中在找到 MIDDLEWARE

技术分享图片

 

看下结果:  注:这个就是我们上面说的。那个流程。。

技术分享图片

 

注:
  在类里面定义的函数是有要求的
  函数名不能变,就是这样定义的
  def process_requset(self,request): (这个有两种情况一种是正常请求没有返回值,不正常请求就有返回值。它可以有return 值)
    pass
  def process_response(self,request)
    pass

不正常返回时,如图,

技术分享图片


中间件的补充

其实中间件有这个几个函数(常用就三个)

  process_request(self,request)

  process_view(self, request, callback, callback_args, callback_kwargs)
  process_template_response(self,request,response)
  process_exception(self, request, exception)
  process_response(self, request, response)
 
我们现在看看process_view()函数 怎么用
如图:
技术分享图片

 

执行顺序:

 

技术分享图片

下面说下view的函数参数:

 def process_view(self, request, view_func, view_func_args, view_func_kwargs):

  #view_func 指的是view函数
  #view_func_args:当url的参数里面不是name定义的,就直接是‘test/(d+)‘定义的,用这个接收
  #view_func_kwargs ,当url里面是name定义的,是‘test/(?P<nid>d+)‘定义的,用这个接收
 
 

有view的执行顺序:

技术分享图片

 

说下不常用的函数

  说明:如果view函数报错了,这个东西才会执行,否则不会执行。

    def process_exception(self,request,exception):

        print(‘ex‘)
 
执行顺序:  在view函数中有错误时,它会在response函数中,从里向外查找有没有定义的 process_exception 的错误处理,如果都没有就报错。就异常处理就返回异常处理。
 
技术分享图片

 

 

看下怎样抓异常:
技术分享图片

 

错误处理:

技术分享图片

 

还有一个不常用的函数:

  说明:如果view函数返回的对象中,具有render方法,这个函数才会执行,这个东西也用不到,知道就行。

    def process_template_response(self,request,response):

       print("----------")
       return response #继续请求下去,就要把返回值返回了
 
看下怎样做:
技术分享图片

 

在类中定义:

技术分享图片

输出的结果:

技术分享图片

 

 总结

  1. 中间件的作用:判断一下,客户端发来的请求有没有带那个请求头,如果带那个请求头,它说你不要再继续往下走了,在我这边就直接终止掉了,这个适合所有请求统一操作,公共校验,黑名单过滤就在中间件这边过滤了。
  2. 定义中间件的类必须继承MiddlewareMixin,并且需要在setting.py文件中导入,导入的时候到类级别即可。
  3. 定义的类,需要重写process_request、process_view和process_response方法,因为这三个是经常用到的,另外两个不经常用到。
 
 
 











以上是关于djnago中间件的主要内容,如果未能解决你的问题,请参考以下文章

Djnago框架组成

Djnago模板与标签

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

flask中的endpoint自定义转化器与djnago中session区别利用装饰器实现登录认证

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

Sublime Text3自定义代码片段