zoukankan      html  css  js  c++  java
  • Django从请求到返回流程

                                             图1:流程图

    1. 用户通过浏览器请求一个页面
    2.请求到达Request Middlewares,中间件对request做一些预处理或者直接response请求
    3.URLConf通过urls.py文件和请求的URL找到相应的View
    4.View Middlewares被访问,它同样可以对request做一些处理或者直接返回response
    5.调用View中的函数
    6.View中的方法可以选择性的通过Models访问底层的数据
    7.所有的Model-to-DB的交互都是通过manager完成的,这里的manager默认命名为objects

    8.如果需要,Views可以使用一个特殊的Context
    9.Context被传给Template用来生成页面
        a.Template使用Filters和Tags去渲染输出
        b.输出被返回到View
        c.HTTPResponse被发送到Response Middlewares
        d.任何Response Middlewares都可以丰富response或者返回一个完全不同的response
        e.Response返回到浏览器,呈现给用户

    Middleware(中间件)
    Middleware并不是Django所独有的东西,在其他的Web框架中也有这种概念。在Django中,Middleware可以渗入处理流程的四个阶段:
    request,view,response和exception,相应的,在每个Middleware类中都有process_request,process_view, process_response 和 process_exception这四个方法。
    你可以定义其中任意一个或多个方法,这取决于你希望该Middleware作用于哪个处理阶段。每个方法都可以直接返回response对象。
    Middleware是在Django BaseHandler的load_middleware方法执行时加载的,加载之后会建立四个列表作为处理器的实例变量:
    _request_middleware:process_request方法的列表
    _view_middleware:process_view方法的列表
    _response_middleware:process_response方法的列表
    _exception_middleware:process_exception方法的列表
    Django的中间件是在其配置文件(settings.py)的MIDDLEWARE_CLASSES元组中定义的。
    在MIDDLEWARE_CLASSES中,中间件组件用字符串表示:指向中间件类名的完整Python路径。例如
    MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]`

    Django项目的安装并不强制要求任何中间件,如果你愿意,MIDDLEWARE_CLASSES可以为空。中间件出现的顺序非常重要:
    在request和view的处理阶段,Django按照MIDDLEWARE_CLASSES中出现的顺序来应用中间件,而在response和exception异常处理阶段,
    Django则按逆序来调用它们。也就是说,Django将MIDDLEWARE_CLASSES视为view函数外层的顺序包装子:
    在request阶段按顺序从上到下穿过,而在response则反过来。以下这张图可以更好地帮助你理解:

                                                                         图2:中间件

     文章转载于:http://projectsedu.com/2016/10/17/django%E4%BB%8E%E8%AF%B7%E6%B1%82%E5%88%B0%E8%BF%94%E5%9B%9E%E9%83%BD%E7%BB%8F%E5%8E%86%E4%BA%86%E4%BB%80%E4%B9%88/
  • 相关阅读:
    Hibernate持久化对象修改id重新保存的办法
    hibernate实现数据实体复制保存
    MySQL 语句中执行优先级——and比or高
    Unity3D研究院之静态自动检查代码缺陷与隐患
    MVC模式在游戏开发的应用
    Unity3D的LightProbe动态光探头用法介绍
    高达渐出现效果Shader
    Unity3D战争迷雾效果
    从3D Studio Max导入物体 Importing Objects From 3D Studio Max
    从maya导入物体 Importing Objects From Maya
  • 原文地址:https://www.cnblogs.com/BGPYC/p/8017170.html
Copyright © 2011-2022 走看看