十四 Django框架,中间件
2024-09-08 13:02:20
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
在django项目的settings模块中,有一个 MIDDLEWARE变量,其中每一个元素就是一个中间件(也就是一个中间件模块的一个类),如下。
settings模块中
#中间件
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',
]
自定义中间件
1、定义中间件模块,在中间件模块里定义中间件类
process_request(self, request)有请求时执行
request参数接收请求信息对象
process_view(self, request, callback, callback_args, callback_kwargs)逻辑处理之前执行
process_exception(self, request, exception)出错时执行
exception参数接收错误信息
process_response(self, request, response)响应后执行,无论是否出错
response参数接收html页面对象,立面包含响应码
#!/usr/bin/env python
#coding:utf-8
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import render class zhongjianjian(MiddlewareMixin): def process_request(self, request):
print('有请求时执行')
# print(request.META) #请求对象内容
#在这里可以做ip访问拦截器 def process_view(self, request, callback, callback_args, callback_kwargs):
print('逻辑处理之前执行') def process_exception(self, request, exception):
print('出错时执行')
# return render(request, 'app1/cuowu.html')
print(exception)
#做程序出错时处理 def process_response(self, request, response):
print('响应后执行,无论是否出错')
return response
2、将中间件模块里的类路径注册到MIDDLEWARE列表里
#中间件
MIDDLEWARE = [
'app1.chajian.zhong_jian_jian.zhongjianjian',
'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',
]
中间件工作流程
#中间件
MIDDLEWARE = [
'app1.chajian.zhong_jian_jian.zhongjianjian',
'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',
]
如果出错流程
最新文章
- 对于C(n,k)取模
- MongoDB(五)mongo语法和mysql语法对比学习
- 虚拟机开机提示Operating System not found解决办法
- Emoji表情符号录入MySQL数据库报错
- log4j配置不同的类多个日志文件
- web前端开发教程系列-2 - 前端开发书籍分享(转)
- codeforces 471B. MUH and Important Things 解题报告
- form属性method=";get/post
- eclipse启动不了报错java was started but returned exit code=13
- 九度OJ 1497 面积最大的全1子矩阵 -- 动态规划
- 再次深入理解delphi的类
- ZOJ 3702 Fibonacci
- 2013 吉林通化邀请赛 Play Game 记忆化搜索
- java逼出来的递归中间
- ubuntu上的mysql数据库双机备份设置
- solr 学习之简介及安装
- Django REST framework反向生成url
- eclipse远程调试Tomcat方法(测试成功并且说说遇到的坑)
- Java基于opencv实现图像数字识别(一)
- 2.5 UML顺序图
热门文章
- udp广播和多播
- CSDN开源夏令营 基于Compiz的switcher插件设计与实现之前期准备 git的简单使用
- Linux 能PING IP 但不能PING 主机域名的解决方法 vim /etc/nsswitch.conf hosts: files dns wins
- Linux的各个文件夹名称解释(FHS)
- web 网页截取图片
- iOS OC和JS的交互 javaScriptCore方法封装
- php header, 允许ajax跨域访问
- MySQL 练习 答案
- 我的Android进阶之旅------>Android二级ListView列表的实现
- hibernate 多对多操作(级联操作)