zoukankan      html  css  js  c++  java
  • django 的请求处理部分----WSGIHandler 源码分析 django1.5.5

    从这里拉开django框架的帷幕。。撕开,哈哈

    主要涉及的类:django.core.handlers.base.BaseHandler,django.core.handlers.wsgi.WSGIHandler,前者为后者的父类。

    django.http.request.HttpRequest

    后者的实例实现了WSGI请求的处理,因为WSGIHandler 实现了__call__方法,所以实例成为了可调用对象。

     流程:接收到一个wsgi请求--》生成一个WSGIHandler实例,传入参数environ,start_response.--》建立request对象(environ作为参数)--》调用base.BaseHandler的get_response方法(使用这个request作为参数)

    这个get_response的主要作用就是各种middleware的调用,其次就是解析url到view,依据url.py中的patterns。

    urlresolve是什么呢,就是从urlconf中找出第一个匹配到的view。

    然后就开始middleware和view的调用了。

    get_response首先将request用_requet_middleware处理一遍。

    如果request_middleware返回response了,就直接结束并返回response

    request_middleware循环完了当然该view_middleware了。view_middleware在view还没有被执行的时候进行处理。参数是request,view,var参数keyword参数。

    接着就该真正的执行这个view了,如果在views中出错了,就进行exceptiion_middleware处理。否则返回一个response。

    如果view的返回值是一个Template,那么会导致template_response_middleware的调用。参数是request和response

    最后被调用的是response_middleware,参数仍然是request,response,不过这个response是Response对象了。。

    注意在上面任何一步返回一个response都会导致views中的response失效。

    没什么难的,源代码很清晰。。

    接下来分析一下这个过程中涉及到的urlresolve过程。

  • 相关阅读:
    Springboot-Static-Resource
    Springboot-Listener
    Springboot--servlet 、filter
    java 面试-- java框架-mybaits
    SVN备份教程(二)
    SVN备份教程(一)
    深入浅出MongoDB(三)环境搭建
    关于在c#中引用外部dll文件,在页面中找不到命名空间
    在win8中如何实现下拉刷新的功能
    C# treeview控件部分节点添加checkbox
  • 原文地址:https://www.cnblogs.com/Yeah-come-on/p/3652528.html
Copyright © 2011-2022 走看看