记录一下django的启动过程,通常在开发阶段使用./manage.py subcommand options启动项目。
框架的处理方法主要集中在django包中,我们看看该包中都含有写什么文件
简单介绍一下每个文件的用途:
Apps,处理app载入等问题,存储已经载入的所有app
Bin,django-admin文件,框架启动的入口之一
Conf,主要有两个作用:1) 处理全局配置, 比如数据库、加载的应用、MiddleWare等 2) 处理urls配置, 就是url与View的映射关系。
Contrib,由Django的开发者贡献的功能模块,不过既然都已经随版本发布,就表示是官方的。
Core,Django的核心处理库,包括url分析、处理请求、缓存等,其中处理请求是核心了,比如处理fastcgi就是由wsgi.py处理。
Db,顾名思义,处理与数据库相关的,就是ORM。
Dispatch,其实这不是Django原创,是pydispatch库,主要处理消费者-工作者模式。
Forms,处理html的表单,不用多介绍。
Http,request、response、cookie等处理
Middleware,中间件,就是处理HTTP的request和response的,类似插件。比如默认的common中间件的一个功能:当一个页面没有找对对应的pattern时,会自定加上?/?重新处理。比如访问/blog时,而定义的pattern是?^blog/$?,所以找不到对应的pattern,会自动再用/blog/查找,当然前提是APPEND_SLASH=True。
Template,Django的模板。
Templatetags,处理Application的tag的wrapper,就是将INSTALLED_APPS中所有的Templatetags目录添加到Django.Templatetags目录中,则当使用{ {load blog}}记载tag时,就可以使用import Django.Templatetags.blog 方式加载了。不过这有一个问题,如果其他Application目录中也有blog.py,这会加载第一个出现blog.py的tag。其实在Django中,有许多需要处理重名的地方,比如Template,需要格外小心,这个后续在介绍。
Test,测试相关
Urls,url处理
Utils,公共库,很多公用的类都在放在这里。
Views,最基本的View方法。
接下来看看execute_from_command_line函数是如何做的:
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_demo.settings")
try:
from django.core.management import execute_from_command_line
except ImportError:
# The above import may fail for some other reason. Ensure that the
# issue is really that Django is missing to avoid masking other
# exceptions on Python 2.
try:
import django
except ImportError:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
)
raise
execute_from_command_line(sys.argv)
查看manage.py文件,首先将本项目的settings文件位置放入系统变量之中,然后启动django.core.management中的execute_from_command_line方法,正式进入Django框架处理的过程。
框架的处理方法主要集中在django包中,我们看看该包中都含有写什么文件
简单介绍一下每个文件的用途:
Apps,处理app载入等问题,存储已经载入的所有app
Bin,django-admin文件,框架启动的入口之一
Conf,主要有两个作用:1) 处理全局配置, 比如数据库、加载的应用、MiddleWare等 2) 处理urls配置, 就是url与View的映射关系。
Contrib,由Django的开发者贡献的功能模块,不过既然都已经随版本发布,就表示是官方的。
Core,Django的核心处理库,包括url分析、处理请求、缓存等,其中处理请求是核心了,比如处理fastcgi就是由wsgi.py处理。
Db,顾名思义,处理与数据库相关的,就是ORM。
Dispatch,其实这不是Django原创,是pydispatch库,主要处理消费者-工作者模式。
Forms,处理html的表单,不用多介绍。
Http,request、response、cookie等处理
Middleware,中间件,就是处理HTTP的request和response的,类似插件。比如默认的common中间件的一个功能:当一个页面没有找对对应的pattern时,会自定加上?/?重新处理。比如访问/blog时,而定义的pattern是?^blog/$?,所以找不到对应的pattern,会自动再用/blog/查找,当然前提是APPEND_SLASH=True。
Template,Django的模板。
Templatetags,处理Application的tag的wrapper,就是将INSTALLED_APPS中所有的Templatetags目录添加到Django.Templatetags目录中,则当使用{ {load blog}}记载tag时,就可以使用import Django.Templatetags.blog 方式加载了。不过这有一个问题,如果其他Application目录中也有blog.py,这会加载第一个出现blog.py的tag。其实在Django中,有许多需要处理重名的地方,比如Template,需要格外小心,这个后续在介绍。
Test,测试相关
Urls,url处理
Utils,公共库,很多公用的类都在放在这里。
Views,最基本的View方法。
接下来看看execute_from_command_line函数是如何做的:
def execute_from_command_line(argv=None):
"""
A simple method that runs a ManagementUtility.
"""
utility = Manageme