
上一篇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
需求 在func1里调用func2函数,函数如下,func1 func2可能在同一个文件,也可能在不同文件,也可能位于不同的flask blueprint模块中:
@route("/url1")
def func1()
#To do
@route("/url2")
def func2():
#To do
想在func2里面调用func1,使用python requests库,在func2里面发起post请求
其它做法博客链接:
>
简单说下接口测试,现在常用的2种接口就是>
新增两个隐藏的input,post的时候就可以获取到了
<form method="post" enctype=multipart/form-data id="0" ><input type=file name=file >
<input type=submit value=上传>
<input type="text" style="visibility: hidden;" id="formname" value="name0" />
<input type="text" style="visibility: hidden;" id="formid" value="0" />
</form>
flask默认的视图支持的请求方法只包括三种:
其中 HEAD 和 OPTIONS 方法由Flask自动处理,如果不传参数,默认为 GET 请求
Q: 如何编写支持 POST 请求方法的函数?
输出
flask中,只需要在视图函数的上面添加 approute 路由装饰器即可
这样就可以实现访问 /hi1 和 /hi2 时,都是调用的 hi 方法。
举例
注意:如果是路由不同,但是视图函数相同,方法也相同,优先返回离视图函数最近的路径
输出
以上就是关于Flask初探二( app.route 内部实现)全部的内容,包括:Flask初探二( app.route 内部实现)、flask接口中调用接口、使用python发布接口,如何提醒用户升级等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)