中间件
 

一、概念

django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

其中process_view方法用的较少,process_template_response方法一般不会用
注意:中间件中的五个方法是固定的,使用时注意参数

 
 

二、创建中间件

推荐下面这个方法,上面方法会被废弃(不继承了,直接把继承的内容拿过来)

 
 
中间件在settings配置里面注册

 
 

三、中间件方法介绍

process_response一定要有返回值的(response),因为中间件的执行顺序,先执行每个中间件的process_request,执行完视图函数后(视图函数执行完也有返回值,返回值为response),再倒着通过每个中间件的process_response把response传递出来,process_response可以对response进行修改,例如:给响应体加上了响应头, 所以response可能和视图函数返回的response不一样
 
但是process_request不要轻易有返回值,如果有返回值,就直接走到当前中间件的process_response,而不会走到视图函数

 
 
process_view方法
如果process_view方法有返回值,则执行顺序为:

 
 
process_exception:如果视图函数出错,为了不返回错误页面,就执行这个方法,这个方法可以写一个很友好的返回信息给用户,但是如果视图函数的异常自己捕捉到,就不用了,直接到process_response

 

 

四、应用实例:用中间件实现用户验证

所有的页面都验证,如果未登录,就跳转到登录页面,把不需要验证的页面排除到验证之外,如下:

五、中间件概要总结

a. 中间件是一个类,有五个固定的方法
- process_request
- 有,直接执行当前中间件和上方中间件的process_response
- 无
应用: 用户登录授权(排除不需要登录的url)
- process_response
- 必须有返回值
 
- process_view
 
- process_exception
 
- process_tempalte_response
- 必须有返回值
- 必须对象中要有render方法
 
b. 流程
 
c. 什么时候用中间件?所有请求统一做处理时使用
- 登录验证
 
d. 中间件中的方法,可以有任意个

Django【进阶】中间件的更多相关文章

  1. Django 进阶(分页器&中间件)

    分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views h ...

  2. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  3. Django进阶篇【1】

    注:本篇是Django进阶篇章,适合人群:有Django基础,关于Django基础篇,将在下一章节中补充! 首先我们一起了解下Django整个请求生命周期: Django 请求流程,生命周期: 路由部 ...

  4. Django进阶知识

    drf学习之Django进阶点 一.Django migrations原理 1.makemigrattions: 相当于在每个app下的migrations文件夹下生成一个py脚本文件用于创建表或则修 ...

  5. 02:Django进阶篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  6. python web框架 Django进阶

    django 进阶 基础中,一些操作都是手动创建连接的非主流操作,这样显得太low,当然也是为了熟悉这个框架! 实际中,django自带连接数据库和创建app的机制,同时还有更完善的路由系统机制.既然 ...

  7. django进阶补充

    前言: 这篇博客对上篇博客django进阶作下补充. 一.效果图 前端界面较简单(丑),有两个功能: 从数据库中取出书名 eg: 新书A 在form表单输入书名,选择出版社,选择作者(多选),输入完毕 ...

  8. django进阶-3

    先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin, 使界面更牛逼 数据库表结构: app01/models.py from django.db import models ...

  9. django进阶-4

    前言: 下篇博客写关于bootstrap... 一.如何在脚本测试django from django.db import models class Blog(models.Model): name ...

  10. 自定义Django的中间件

    分析Django的生命周期,我们知道所有的http请求都要经过Django的中间件. 假如现在有一个需求,所有到达服务端的url请求都在系统中记录一条日志,该怎么做呢? Django的中间件的简介 D ...

随机推荐

  1. 【廖雪峰老师python教程】——OOP

    概述 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 数据封装.继承和多态 ...

  2. Java IO学习--File类

    一.File类 File类具备一定的误导性,可能容易认为它指代的是文件,实际并非如此,它既能代表一个特定文件的名称,又能表示一个目录下一组文件的名称.简而言之,File类是文件或者目录路径名的抽象表示 ...

  3. 【CodeForces】9B-Running Student

    目录 Question Description Input Output Solution 解法1 Question Description 小明在公交车始发站上车,他应该在哪个站点下车才能最快到达学 ...

  4. [boost-3] 函数对象

    boost库学习: 函数对象,成为‘高阶函数’,可以呗传入到其他函数或者从其他函数返回的一类函数. Boost.Bind可替换来自c++标准中的std::bind1st()和std::bind2dn( ...

  5. 【Linux】——搭建nexus

    1.安装 前提条件: JDK已经安装,运行java -version查看. 将本地下载好的nexus存放到linux上,存放路径为 /usr/local/software.可使用winscp直接拷贝. ...

  6. perf 对两个map是否重叠的判断,以及函数map_groups__fixup_overlappings代码逻辑

    该标题可以抽象出来的问题是:两个前开后闭的区间 rangeA 和 rangeB,如何判断这两个区间是否重叠.这个问题在内核中非常重要,虚拟地址空间的划分需要它,perf中map_group的构建也需要 ...

  7. 并发(三) CountDownLatch

    CountDownLatch 和CyclicBarrier的区别是,CyclicBarrier可以循环使用,CountDownLatch不可以:CyclicBarrier可以有一个Runnable参数 ...

  8. kibana和ElasticSearch的信息查询检索

    使用kibana来进行ElasticSearch的信息查询检索 大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括Ela ...

  9. WebSocket对象的创建及其与WebSocket服务器的连接(5)

    WebSocket接口的使用非常简单,要连接通信端点,只需要创建一个新的WebSocket实例,并提供希望连接URL. //ws://和wss://前缀分别表示WebSocket连接和安全的WebSo ...

  10. SRM710 div1 ReverseMancala(trick)

    题目大意, 给定一个有n个点的环,n不超过10,每个点上有一个权重 起始时权重将会给出,然后有2种操作 第一种操作是,选择一个位置i,获得权重w = a[i],把a[i]变成0,然后接下来在环上顺着走 ...