上一篇blog 探究了flask 各个参数的作用,本篇将围绕 @approute('/') 探究一下flask 做了些什么
route 源码
route 实际上是一个闭包, 路径规则通过route 方法被rule 形参引用, 然后返回decorator 方法,所以@approute('/') <==>@decorator , 所以 hello_world =decorator (hello_world ) <==> hello_world
@approute('/') 的主要作在于 endpoint = optionspop('endpoint', None) 和 selfadd_url_rule(rule, endpoint, f, options) 两句
add_url_rule 源码
从方法注释可以看到另外一种可以将url 规则和试图函数绑定的方式
通过装饰器注册路由, 一般情况下 endpoint 等于None, 所以endpoint = _endpoint_from_view_func(view_func)
_endpoint_from_view_func
通过查看_endpoint_from_view_func方法, 可以知道endpoint = view_func__name__, 既通过装饰器注册路由,一般情况下 endpoint 等于方法名
实验
一般情况下 view_func 是没有methods 属性的, 通过修改源码方便实验
源码
demopy
实验结果
通过上面的结果可以看出
分析
通过这两句可以得出一个结论, methods 通过键值对形式赋值, 除了methods = "POST" 的形式之外的所有可迭代的容器都可以作为值
源码
实验
源码改造
demopy
结果
通过实验可以得出,
源码
实验
源码改动
demopy
实验结果
总结:
到此结 DragonFangQy 2018620
可以从模板中直接访问Flask当前的config对象:
就是flask中代表当前请求的request对象:
输出结果为(本机本地运行):
为Flask的session对象
{{ sessionget('name') }}
输出结果为(本机本地运行):
url_for会根据传入的路由器函数名,返回该路由对应的URL,在模板中始终使用url_for()就可以安全的修改路由绑定的URL,则不比担心模板中渲染出错的链接,经常用于超链接,比如下面的例子:
点击即可跳转至主页
同时,如果定义的路由URL是带有参数的,可以把它们作为关键字参数传入url_for(),Flask会把他们填充进最终生成的URL中:
这个函数会返回之前在flask中通过flask()传入的消息的列表,flash函数可以把由Python字符串表示的消息加入一个消息队列中,再使用get_flashed_message()函数取出它们并消费掉:
在Flask中,为了处理web表单,我们一般使用Flask-WTF扩展,它封装了WTForms,使用Flask-WTF表单扩展,可以帮助进行CSRF验证,帮助我们快速定义表单模板,而且可以帮助我们在视图中验证表的数据
注意:使用Flask-WTF需要配置参数SECRET_KEY。
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。 SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密匙生成加密令牌。
实例:
以上就是关于Flask初探二( app.route 内部实现)全部的内容,包括:Flask初探二( app.route 内部实现)、Python中Flask框架的变量和函数、flask入门到起飞(五) flask-wtf使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)