Uliweb通过runserver命令启动,这其中是怎么样了流程,在这边理一下:
在Uliweb\manage.py里有runserver这个函数,那基本上就是通过调用这个函数启动Uliweb的了。
runserver函数本身是一个装饰函数,在main函数中,并没有对runserver的调用,应该注意的script.run()的调用。
run()函数是来自于werkzeug\script.py中。该函数就是对各种Uliweb的命令的调用。对于我们现在关注的是runserver
命令,那么最终的就是对runsever函数的调用。下面来分析runserver函数做了些什么操作。
在runserver函数中,主要是对make_application()和runsimple()的调用。
make_application返回的是一个Dispatcher的实例:
Dispatcher 初始话的时候,动态的加入了以下的属性(加入的都是类属性),这些在整个处理中都有很重要的作用。
-Dispatcher:
--modules:dict=得到的是该APP下的有用的view文件和,用到的SETTINGS.INI 文件。其中会包含orm\settings.ini,
session\settings.ini等Uliweb平台自动加入的ini文件
--url_map:werkzeug.routing.Map=Dispatcher.url_map = url_map(解析url)
--url_infos:list=url的列表,该列表是import view时通过expose得到的(待确认)
--全局变量settings=通过汇集各个settings.ini的配置得到,类型为:Uliweb.utils.pyini.Ini
--template_dirs:list=template的目录
--env:uliweb.core.storage.Storage=环境变量:['redirect', 'application', 'settings', 'url_for', 'error']
--settings:uliweb.util.pyint.Ini=所有用到的app的settings.ini
--template_env=env的COPY
--default_template=默认的template模板
runsimple()就是wrekzeug的启动服务器端的服务程序,使服务器处于监听状态,等待客户端的处理请求。一旦有客户端请求过来就调用相应的app开始处理相关请求.
在uliweb中的middleware有一次处理顺序,比如说auth的order是100,session的order是50,这个order决定了
middleware的处理先后顺序。order越小,在处理request的时候越先处理,但是处理reponse的时候顺序是倒过来的。