`
eric_weitm
  • 浏览: 235331 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

django源代码解析

 
阅读更多

一、wsgi: webserver与app之间的交互标准

    1、输入env,

    2、callback(status header),  

    3、返回数组形式的body

 

def app(environ, start_response):

    start_response('200 OK', [('Content-Type', 'text/plain')])

    yield "Hello world!\n"

 

二、主流程的处理

1、所有的Application统一是 django/core/handlers/wsgi.py WSGIHandler

2、WSGIHandler内部会将整个的处理分为几个阶段

1》load_middleware(初始化时进行一次)

request_middleware

self._view_middleware = []

 

# 后3个是从后往前

       self._template_response_middleware = []

       self._response_middleware = []

       self._exception_middleware = []

   2》触发回调 signals.request_started.send(sender=self.__class__, environ=environ)

    实际只有db部分会断开后再连接

3》构造WSGIRequest

4》get_response ----- 主流程

1、依次回调process_request,有返回值就中断,否则执行下一个

2、根据url找到view

3、依次调用process_view

4、具体回调, -----必须要返回response

5、如果有render,则应用 process_template_response(使用模板前,可以修改模板相关逻辑)

6、使用process_response    ---- 生成response后

7、在这个过程中有异常时,触发process_exception

简单说:process_request parseUrl process_view callback process_template_response render process_response

3、db connection怎么保活? 直接不保活

django.db.backends.base.base.py BaseDatabaseWrapper get_new_connection

django.db.models.sql.compiler.py execute_sql 

 

默认是每个request新开一个数据库connection,之后close(无状态)。如果要维护的话,注意设置connection的状态和数量限制

 

三、典型app的目录结构

manager.py -- 指定setting文件

project

    settings

    urls

    wsgi

    tests

app

    models

    views

    urls

    apps

    admin

static

template

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics