Flask源码之:路由加载
路由加载整体思路:
1. 将 url = /index 和 methods = [GET,POST] 和 endpoint = "index"封装到Rule对象
2. 将Rule对象添加到 app.url_map中。
url_rule_class = Rule
self.url_map = self.url_map_class()
3. 把endpoint和函数的对应关系放到 app.view_functions中。
self.view_functions = {}
在add_url_rule中有:
self.view_functions[endpoint] = view_func
看源码:
手写项目启动:
from flask import Flask app = Flask(__name__,static_url_path='/xx') @app.route('/index')
def index():
return 'hello world' if __name__ == '__main__':
app.run()
点击route进入源码
route函数整体是个闭包
点击add_url_rule,里面传了很多参数,self是app,rule是'/index'这个路径字符串,endpoint默认就是函数的别名'index',f就是函数名index
options["endpoint"] = endpoint将endpoint作为值放到options的字典里面去了,
再点_endpoint_from_view_func
返回就是个函数名,所以endpoint不写时默认就是你传进来的函数名
再回到add_url_rule
再往下找,rule = self.url_rule_class(rule, methods=methods, **options)就把rule(路径),methods支持请求方式,这里的option就是刚才传进去的endpoint(函数别名)都给传进去了
再点url_rule_class进去
所以,前面的rule就是Rule的一个对象,并把三个参数给封装了进去
再点Rule进去
刚才传的路径给了string,methods放到了methods(GET,POST之类的),endpoint放的是函数别名(字符串)
再回到add_url_rule
往下走,self.url_map.add(rule),你点url_map进去之后会发现他是个Map的对象,就把rule添加到了Map对象中了
再往下看,view_func是真正的函数名,函数名被放到了一个字典中.
这样,flask路由的加载就走完了
所有的内容全部都加到了app中去了.
Flask源码之:路由加载的更多相关文章
- flask 源码专题(八):路由加载
1.示例代码 from flask import Flask app = Flask(__name__,static_url_path='/xx') @app.route('/index') def ...
- 06 flask源码剖析之路由加载
06 Flask源码之:路由加载 目录 06 Flask源码之:路由加载 1.示例代码 2.路由加载源码分析 1.示例代码 from flask import Flask app = Flask(__ ...
- 05 flask源码剖析之配置加载
05 Flask源码之:配置加载 目录 05 Flask源码之:配置加载 1.加载配置文件 2.app.config源码分析 3.from_object源码分析 4. 总结 1.加载配置文件 from ...
- flask源码系列
更新中 HTML文档中元素存在,但是在浏览器中不显示.一般用于配合JavaScript代码使用. 04 LocalStack和Local对象实现栈的管理 05 Flask源码之:配置加载 06 Fla ...
- flask源码剖析系列(系列目录)
flask源码剖析系列(系列目录) 01 flask源码剖析之werkzurg 了解wsgi 02 flask源码剖析之flask快速使用 03 flask源码剖析之threading.local和高 ...
- Flask源码流程分析(一)
Flask源码流程分析: 1.项目启动: 1.实例化Flask对象 1. 重要的加载项: * url_rule_class = Rule * url_map_class = Map * session ...
- flask 源码专题(二):请求上下文与全文上下文
源码解析 0. 请求入口 if __name__ == '__main__': app.run() def run(self, host=None, port=None, debug=None, lo ...
- flask源码分析
本flask源码分析不间断更新 而且我分析的源码全是我个人觉得是很beautiful的 1 flask-login 1.1 flask.ext.login.login_required(func),下 ...
- Flask源码学习—config配置管理
自己用Flask做了一个博客(www.hbnnlove.sinaapp.com),之前苦于没有对源码解析的文档,只能自己硬着头皮看.现在我把我自己学习Flask源码的收获写出来,也希望能给后续要学习F ...
随机推荐
- Windows 10中的CSC.exe、CSC.rsp
(1)CSC.exe位置 [4.0的位于] C:\Windows\Microsoft.NET\Framework\v4.0.30319 [之后版本的位于] C:\Program Files (x86) ...
- luogu_2831: 愤怒的小鸟
洛谷2831:愤怒的小鸟(状压\(dp\)) 题意: 在二维平面上给定\(n\)个点\((1\leq n\leq18)\). 其中每个点用\((x_i,y_i)\)表示\((0<x_i,y_i& ...
- 洛谷p1966火柴排队题解
ps:鉴于你们的蒟蒻yxj实在太蒻辽, 所以, 看不懂也是正常的........ 树状数组 xxy学姐给我们讲的树状数组, 她讲的真的是太好啦!qwq!吹爆xxy 然后, 为了巩固自己, 硬着头皮写题 ...
- vue-skeleton-webpack-plugin骨架屏与page-skeleton-webpack-plugin骨架屏生成插件
vue-skeleton-webpack-plugin与page-skeleton-webpack-plugin使用 插件github地址:https://github.com/lavas-proje ...
- nginx 反向代理之 proxy_redirect
proxy_redirect 该指令用来修改被代理服务器返回的响应头中的Location头域和“refresh”头域. 语法结构为: proxy_redirect redirect replaceme ...
- module 'torch' has no attribute 'gesv'
新版torch不支持gesv,使用solve函数. Kt, _ = torch.gesv(P.mm(H.t()).t(), S) 改成 Kt, _ = torch.solve(P.mm(H.t()). ...
- 3D中的相机 - 投影矩阵和视图矩阵
3D中的相机 - 投影矩阵和视图矩阵 3d游戏中,一般通过相机的设置来计算投影矩阵和视图矩阵,比如untiy和cocos,一般情况下我们不用关注如何计算, 可以直接在可视化的编辑器中调整参数就可以了, ...
- Fluent——UDF监测指定点的物理量
Fluent版本:19.0 Fluent当中提供了监测某一点物理量随迭代次数或者随时间变化的功能,下面我们就介绍如何在UDF当中实现相同的功能,并且UDF更加灵活,通过UDF的方式我们在知道某点运动规 ...
- IO多路复用之select poll epoll
参考文档: http://blog.csdn.net/tennysonsky/article/details/45745887 select(),poll(),epoll()都是I/O多路复用的机制. ...
- mysql(一)工作原理 & 数据库引擎
参考文档 http://www.cnblogs.com/xiaotengyi/articles/3641983.html innodb:https://www.cnblogs.com/Aiapple/ ...