zoukankan      html  css  js  c++  java
  • Python Day 65 Django框架、Django生命周期、Django中间件、中间件执行流程、Django中MTV模式 和 MVC模式

      ##Django生命周期

     

      ##Django中间件

    #Django中的中间件
    打开Django项目的Settings.py文件,其中MIDDLEWARE配置项就是中间件
    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',
    ]
    
    
    MIDDLEWARE配置项是一个列表(列表是有序的,记住这一点,后面你就知道为什么要强调有序二字),列表中是一个个字符串,这些字符串其实是一个个类,也就是一个个中间件。

      ##自定义中间件

    如何自定义中间件
     1.在某个应用下创建一个任意名称的py文件
     2.写一个类继承MiddlewareMixin
     3.在该类中书写上述五个可以自定义的方法
     4.在settings配置文件将你写的中间件添加到Middleware配置项中
      ps:格式应用名.py文件名.类名 (不会自动提示 书写的时候要格外注意)

    #
    1、中间件暴露给用户五个可以自定义的方法,分别是:(主要的是process_request和process_response) 1、process_request(self,request)请求来的时候 2、process_view(self, request, view_func, view_args, view_kwargs) 路由匹配成功即将执行视图函数之前 3、process_template_response(self,request,response) 视图函数中返回了render对象 4、process_exception(self, request, exception) 视图函数报错之后 报错信息会交给当前方法 5、process_response(self, request, response)响应走的时候 以上方法的返回值可以是None或一个HttpResponse对象,如果是None,则继续按照django定义的规则向后继续执行,如果是HttpResponse对象,则直接将该对象返回给用户。 #2、process_request方法 process_request有一个参数,就是request,这个request和视图函数中的request是一样的(在交给Django后面的路由之前,对这个request对象可以进行一系列的操作)。 由于request对象是一样的,所以我们可以对request对象进行一系列的操作,包括request.变量名=变量值,这样的操作,我们可以在后续的视图函数中通过相同的方式即可获取到我们在中间件中设置的值。 它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下一个中间件处理,如果是HttpResponse对象,Django将不执行视图函数,而将相应对象返回给浏览器。 #3、process_response方法 多个中间件中的process_response方法是按照MIDDLEWARE中的注册顺序倒序执行的,也就是说第一个中间件的process_request方法首先执行,而它的process_response方法最后执行,最后一个中间件的process_request方法最后一个执行,它的process_response方法是最先执行。 #4、process_view方法 process_view(self, request, view_func, view_args, view_kwargs) 该方法有四个参数 - request是HttpRequest对象。 - view_func是Django即将使用的视图函数。 (它是实际的函数对象,而不是函数的名称作为字符串。) - view_args是将传递给视图的位置参数的列表. - view_kwargs是将传递给视图的关键字参数的字典。 view_args和view_kwargs都不包含第一个视图参数(request)。 Django会在调用视图函数之前调用process_view方法。 它应该返回None或一个HttpResponse对象。 如果返回None,Django将继续处理这个请求,执行任何其他中间件的process_view方法,然后在执行相应的视图。 如果它返回一个HttpResponse对象,那么将不会执行Django的视图函数,而是直接在中间件中掉头,倒叙执行一个个process_response方法,最后返回给浏览器

      ##中间件执行流程

    请求到达中间件之后,先按照正序执行每个注册中间件的process_request方法,process_request方法返回的值是None,就依次执行,如果返回的值是HttpResponse对象,不再执行后面的process_request方法,而是执行当前对应中间件的process_response方法(注意不是掉头执行所有的process_response方法),将HttpResponse对象返回给浏览器。也就是说:如果MIDDLEWARE中注册了6个中间件,执行过程中,第3个中间件返回了一个HttpResponse对象,那么第4,5,6中间件的process_request和process_response方法都不执行,顺序执行3,2,1中间件的process_response方法。

    process_request方法都执行完后,匹配路由,找到要执行的视图函数,先不执行视图函数,先执行中间件中的process_view方法,process_view方法返回None,继续按顺序执行,所有process_view方法执行完后执行视图函数。假如中间件3 的process_view方法返回了HttpResponse对象,则4,5,6的process_view以及视图函数都不执行,直接从最后一个中间件,也就是中间件6的process_response方法开始倒序执行。

       ##Django请求流程图

      

      ##Django中MTV模式 和 MVC模式

    MVC:
        
        项目目录结构的设计模式
        
        
        客户       ------点餐-------->    服务员  ------处理菜单需求--------> 厨师
                   <------------------            <-------------------------        
        
        (浏览器)  ------------------->  函数或者类处理  ------------------>  数据库
                                           业务逻辑
        views:                         controllers                          models:
                                            loginController.py                    LoginModel.py
                                            UserController.py                   UserModel.py
            大量html页面                         
            
        
    MVC
        
        django:
            M : models 
            T : Templates (各种html页面) 相当于views
            V :Views(视图处理函数) 相当于 controllers
        
  • 相关阅读:
    第二十一章流 1流的操作 简单
    第二十章友元类与嵌套类 1友元类 简单
    第十九章 19 利用私有继承来实现代码重用 简单
    第二十章友元类与嵌套类 2嵌套类 简单
    第十九章 8链表类Node 简单
    第二十一章流 3用cin输入 简单
    第十九章 10 图书 药品管理系统 简单
    第十九章 11图书 药品管理系统 简单
    第二十一章流 4文件的输入和输出 简单
    第十九章 12 什么时候使用私有继承,什么时候使用包含 简单
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/11210355.html
Copyright © 2011-2022 走看看