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

需求 在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发布接口,如何提醒用户升级等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/10086638.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存