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

猜你喜欢

转载自eric-weitm.iteye.com/blog/2378466