前言

  在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中间件的更多相关文章

  1. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  2. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  3. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  4. ASP.NET Core 中间件之压缩、缓存

    前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...

  5. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理

    .NET Core中间件的注册和管道的构建(1)---- 注册和构建原理 0x00 问题的产生 管道是.NET Core中非常关键的一个概念,很多重要的组件都以中间件的形式存在,包括权限管理.会话管理 ...

  8. 从中间件的历史来看移动App开发的未来

    在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...

  9. ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件

    虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...

随机推荐

  1. Android view的一些认识

    转载:9102年末,我对Android view的13条认识: (顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)https://github.com/xiangjiana/Andro ...

  2. webdriervAPI(获取验证信息)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  3. 【手记】解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题

    异常信息: System.OutOfMemoryException: 内存不足. 在 System.Drawing.Graphics.CheckErrorStatus(Int32 status) 在 ...

  4. 源码分析之AsyncTask

    AsyncTask在Android中是很常用的异步线程,那么AsyncTask和Thread有什么区别呢?这里将从源码角度深入理解AsyncTask的设计和工作原理,这里的AsyncTask基于SDK ...

  5. java23种设计模式之七: 观察者模式

    一.应用背景     观察者模式又称为发布/订阅(Publish/Subscribe)模式,我们可以理解为:只有关注信公众号关注后才能收到信息 二.优.缺点 优点: 1.可以动态的改变对象的行为 缺点 ...

  6. 把Javascript 对象转换为键值对连接符字符串的方法总结

    307down votefavorite 93 Do you know a fast and simple way to encode a Javascript Object into a strin ...

  7. 【HDU】6242-Geometry Problem

    今天忽然心血来潮打开牛客网尝试了一下一站到底 前四道题都是不到二十分钟切完,然后第五道来了道计算几何 我也不会啊,于是就觉得大力随机也许可行 然鹅被精度卡到崩溃 后来我才知道 保证有解,是保证你的精度 ...

  8. (六)Java秒杀项目之接口优化

    一.Redis预减库存减少数据库访问 思路:减少数据库访问 1.系统初始化,把商品库存数量加载到Redis 2.收到请求,Redis预减库存,库存不足,直接返回,否则进入3 3.请求入队,立即返回排队 ...

  9. HTML基础之三(form表单)

    .表单form 单是一个包含表单元素的区域. 表单能够包含 input 元素,textarea.select.fieldset.legend 和 label 元素. 表单使用标签(<form&g ...

  10. 【php设计模式】单例模式

    实现单例的三个关键点: 1.使用一个静态成员来保持一个单例实例 2.一个私有的构造方法使得该类只能在类的内部方法中被实例化 3.在实例化对象的静态方法中,先判断静态变量是否已经被赋值,如果赋值则返回该 ...