flask原理分析

主程序运行后:
1.装饰函数app.route()会收集到uri和路由函数的地址,route()函数调用add_url_rule()形成url_map表:
app.py:

def route(self, rule, **options):
def decorator(f):
endpoint = options.pop(“endpoint”, None)
self.add_url_rule(rule, endpoint, f, **options)
return f
return decorator

def add_url_rule:
self.url_map.add(rule)

2.app.run()运行会接收uwsgi发送的uri请求:
run()会调用serving.run_simple()函数,根据uwsgi发送的uri查找url_map,并分配现场函数运行uri对应的函数
app.py:
def run(self, host=None, port=None, debug=None, load_dotenv=True, **options):
try:
run_simple(host, port, self, **options)
finally:
self._got_first_request = False

werkzeug/serving.py
def run_simple(
hostname,
port,
application,
use_reloader=False,
use_debugger=False,
use_evalex=True,
extra_files=None,
reloader_interval=1,
reloader_type=“auto”,
threaded=False,
processes=1,
request_handler=None,
static_files=None,
passthrough_errors=False,
ssl_context=None,
):


run_with_reloader(inner, extra_files, reloader_interval, reloader_type)


return

def run_with_reloader(main_func, extra_files=None, interval=1, reloader_type=“auto”):
“”“Run the given function in an independent python interpreter.”""
import signal

reloader = reloader_loops[reloader_type](extra_files, interval)
signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
try:
    if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
        ensure_echo_on()
        t = threading.Thread(target=main_func, args=())
        t.setDaemon(True)
        t.start()
        reloader.run()
    else:
        sys.exit(reloader.restart_with_reloader())
except KeyboardInterrupt:
    pass
return
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值