Django之自定制中间件及实战示例(其他篇七)

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Burgess_zheng/article/details/86747101

上一篇:Django之缓存六种方式及实战示例(其他篇六)点击跳转
目录篇:Django之其他目录篇 点击跳转
下一篇:Django之信号及实战示例(其他篇八)点击跳转

目录


中间件简介

简单理解就是每个中间件都是一个url对应的处理函数
用户请求url----->中间件请求和响应和异常进行处理-->url对应函数接收用户请求响应处理

实战示例

    1.创建Django项目

      Django之创建项目【二】:https://blog.csdn.net/Burgess_zheng/article/details/86505526

    2.在project目录下创建任意一个目录和一个xx.py文件

django文件路径:project_burgess/Middle/m1.py

    3.自己写3个中间件的类继承MiddlewareMixin的请求方法

django文件路径:project_burgess/Middle/m1.py

__author__ = "Burgess Zheng"
from django.utils.deprecation import MiddlewareMixin

class Row1(MiddlewareMixin):
    def process_request(self,request):
        print('燕雀焉知鸿鹄之志')
    def process_view(self,request,view_func,view_func_args,view_func_kwargs):
        print('思维')
    def process_response(self,request,response):
        print('志不坚者智不达')
        return response

from django.shortcuts import HttpResponse
class Row2(MiddlewareMixin):
    def process_request(self,request):
        print('坚持百忍')
        # return HttpResponse('有志但是坚持不了没用,滚')
    def process_view(self,request,view_func,view_func_args,view_func_kwargs):
        print('知识')
    def process_response(self,request,response):
        print('破而后立')
        return response

class Row3(MiddlewareMixin):
    def process_request(self,request):
        print('紧守初心')
    def process_view(self, request, view_func, view_func_args, view_func_kwargs):
            print('顿悟')
    def process_response(self,request,response):
        print('道之艰')
        return response
    def process_exception(self,request,exception):
        if isinstance(exception,NameError):
            #isinstance:判断该exception异常是否是NameError
            from django.shortcuts import HttpResponse
            return HttpResponse('看不破')
    def process_template_response(self,request,response):
        #如果Views中的函数返回的对象中,具备有render方法的时候才执行
        print('乱世出英雄')
        return  response

    4.settings 注册自定义中间件

路径:project_burgess/project_burgess/setting

    4.定义url

路径:project_burgess/project_burgess/urls.py

from django.contrib import admin
from django.urls import path,re_path #Django版本2.0以上
from project_burgess import views
from django.conf.urls import url  #Django2.0
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    
    #middle
    path('bur_middle/', views.bur_middle),#最新版本的Django路由使用path
    #url(r'^bur_middle/', views.bur_middle), #2.0版本使用的是url

]

    4.定义URL相关函数

路径:project_burgess/project_burgess/views

__author__ = "Burgess Zheng"
#!/usr/bin/env python 
#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponse,redirect


class Foo:
    def render(self):
        return  HttpResponse('OK')
def bur_middle(request):
    # sdfefef #执行函数执行不了报错
    print('寒风不彻骨,哪来梅花扑鼻香')
    return Foo()

    5.浏览器访问结果

     

   6.总结得出生命周期:

上一篇:Django之缓存六种方式及实战示例(其他篇六)点击跳转
目录篇:Django之其他目录篇 点击跳转
下一篇:Django之信号及实战(其他篇八)点击跳转

猜你喜欢

转载自blog.csdn.net/Burgess_zheng/article/details/86747101