博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django进阶-中间件
阅读量:6310 次
发布时间:2019-06-22

本文共 3664 字,大约阅读时间需要 12 分钟。

hot3.png

简介

Django的中间件是处理Django的request和response对象的钩子

  • request:用户向网站发送请求
  • response: 网页根据用户操作返回相应内容

Django中间件执行

  • 中间件是双向执行的,从上到下request请求,从下到上response返回
  • 中间件是按照 setting 中 MIDDLEWARE 的列表顺序从上到下依次执行的
  • 中间件返回值是 None 则继续执行,否则直接 return 终止执行

Django框架默认中间件

MIDDLEWARE = [    'django.middleware.security.SecurityMiddleware',                # 内置的安全机制,保护用户与网站的通信安全    'django.contrib.sessions.middleware.SessionMiddleware',         # 会话session功能    'django.middleware.common.CommonMiddleware',                    # 处理请求信息,规范化请求内容    'django.middleware.csrf.CsrfViewMiddleware',                    # 开启 CSRF(跨站请求伪造) 防护功能    'django.contrib.auth.middleware.AuthenticationMiddleware',      # 内置的用户认证系统    'django.contrib.messages.middleware.MessageMiddleware',         # 内置的信息提示功能    'django.middleware.clickjacking.XFrameOptionsMiddleware',       # 防止恶意程序点击劫持]

Django中间件的固定方法

[函数的名称和参数都是固定的]:

process_request(self,request)#经过中间件的请求【常用】process_response(self, request, response)#经过中间件的返回响应信息,必须是HttpResponse对象【常用】process_view(self, request, view_func, view_args, view_kwargs)#经过中间件的视图处理# request 浏览器发来的请求对象# view_func 将要执行的视图函数名称# view_args 将要执行的视图函数的位置参数# view_kwargs 将要执行的视图函数的关键字参数process_exception(self, request, exception)#经过中间件的异常处理,只有在视图函数出现异常时执行process_template_response(self,request,response)#它的参数,一个HttpRequest对象,response是TemplateResponse对象(由视图函数或者中间件产生)。#process_template_response是在视图函数执行完成后立即执行,但是它有一个前提条件,那就是视图函数返回的对象有一个render()方法(或者表明该对象是一个TemplateResponse对象或等价方法)。

自定义中间件

目录架构[非运用到的文件未展示]

MyDjango    APP        views.py    custom        validation.py    MyDjango        settings.py        urls.py

setting 中添加中间件

'custom.validation.NewMiddleware',   # 类调用使用列表形式添加对应的字符串,类似importlib模块字符串导入模块方法

urls.py配置

from django.contrib import adminfrom django.urls import path,re_pathfrom APP import viewsurlpatterns = [    path('admin/', admin.site.urls),    re_path("^index.html$",views.index),]

新增视图views.py

from django.shortcuts import render,HttpResponsedef index(request):    print("-----  视图函数  ----")    print("视图函数引用的内容:",request.Test)    #raise ValueError("抛出的自定义异常,取消注释可用于异常测试")    print("##################################")    return HttpResponse("视图函数返回内容")

validation.py

# -*- coding:utf8 -*-from django.utils.deprecation import MiddlewareMixinfrom django.shortcuts import HttpResponseclass NewMiddleware(MiddlewareMixin):    def process_request(self, request):        print("自定义的 process_request 请求中间件")        print("访问的URL路径:",request.path_info)        request.Test = "this is test !!!"        print("##################################")    def process_response(self, request, response):        print("自定义的 process_response 返回值中间件")        print("##################################")        return response    def process_view(self, request, view_func, view_args, view_kwargs):        print("自定义的 process_view 视图函数中间件")        print("##################################")    def process_exception(self, request, exception):        print("自定义的 process_exception 处理异常信息中间件")        print("异常信息,无异常则不执行",exception)        print("##################################")        return HttpResponse("ERROR !!!")    def process_template_response(self, request, response):        print("自定义的 process_template_response 模版返回值中间件")        print("##################################")        return response

执行顺序示例

自定义的 process_request 请求中间件访问的URL路径: /index.html##################################自定义的 process_view 视图函数中间件##################################-----  视图函数  ----视图函数引用的内容: this is test !!!##################################自定义的 process_response 返回值中间件##################################

注:中间件版的登录验证需要依靠session,所以数据库中要有django_session表

转载于:https://my.oschina.net/zhaojunhui/blog/3030179

你可能感兴趣的文章
day8--socket网络编程进阶
查看>>
node mysql模块写入中文字符时的乱码问题
查看>>
仍需"敬请期待"的微信沃卡
查看>>
分析Ajax爬取今日头条街拍美图
查看>>
内存分布简视图
查看>>
POJ 2918 求解数独
查看>>
如何学习虚拟现实技术vr? vr初级入门教程开始
查看>>
第4 章序列的应用
查看>>
Mysql explain
查看>>
初识闭包
查看>>
java tcp socket实例
查看>>
011 指针的算术运算
查看>>
hdu1874畅通工程续
查看>>
rails 字符串 转化为 html
查看>>
java-学习8
查看>>
AOP动态代理
查看>>
Oracle序列
查看>>
xcodebuild命令行编译错误问题解决
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
查看>>