Flask初探二( app.route 内部实现)

Flask初探二( app.route 内部实现),第1张

上一篇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使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9320392.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存