Flask 路由机制分析之一

这篇具有很好参考价值的文章主要介绍了Flask 路由机制分析之一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

《Flask Run运行机制剖析》这篇我们讲了应用启动的内部机制,启动后就开始监听Http请求了,请求过来如何跳到对应的函数执行,这就是路由机制。我们沿用上一篇例子,来探究一下@app.route("/")内部干了些什么事。

二、Python中函数特性

装饰器是在不改变对象结构的情况下向现有对象添加功能,它比生成子类更灵活,要理解装饰器之前我们先要要掌握Python中函数重要的几个特性。

【Python中一个函数既可以做为参数被传递,也可以做为另一个函数的返回值】

1、函数中传递函数

Flask 路由机制分析之一,Python&Go,flask,python,后端

执行结果如下:

Flask 路由机制分析之一,Python&Go,flask,python,后端

注:func2定义了一个入参为函数类型,并且在函数内部执行该传入的函数,这里调用时把func1这个函数传进去,这个和Java中的入参为接口,然后调用接口的方法差不多(Android中大量的callBack就是这样实现的)。

2、函数中定义函数

定义一个函数后可以在其内部再定义一个函数(嵌套函数)。

Flask 路由机制分析之一,Python&Go,flask,python,后端

注:func1内部定义了函数func2,func1执行时可以调用内部func2,直接执行func2提示未被定义,说明func2只能在func1中被调用

3、函数返回函数

一个函数可以将另一个函数做为返回值返回。

Flask 路由机制分析之一,Python&Go,flask,python,后端

执行结果

Flask 路由机制分析之一,Python&Go,flask,python,后端

注:执行func1(1)返回的func3是指向func2函数的地址,然后执行func3(2)就会调用func2函数输出其返回值。

4、函数内省

函数内省是指在运行时检查对象类型的一种能力,可以理解为类型检查。

内省常见的方法如下:

Flask 路由机制分析之一,Python&Go,flask,python,后端

三、装饰器

Python中的装饰器是高级语法(Java中装饰器是一种设计模式),它的作用是为已经存在的对象添加额外的功能,常用于插入日志、Web权限校验和缓存等,在使用上和Java的AOP、Annotation比较相似。

1、最简单装饰器例子

Flask 路由机制分析之一,Python&Go,flask,python,后端

执行后输出

Flask 路由机制分析之一,Python&Go,flask,python,后端

注:一个最简单的装饰器,入参为函数,函数内部嵌套函数并且返回内部函数地址,这个其实可以理解为Java中的AOP。

2、使用@调用装饰器

更简单的语法糖 @+装饰器名称放在要被装饰函数前面。

Flask 路由机制分析之一,Python&Go,flask,python,后端

执行后输出

Flask 路由机制分析之一,Python&Go,flask,python,后端

3、带参数的装饰器

Flask 路由机制分析之一,Python&Go,flask,python,后端

执行后结果输出

Flask 路由机制分析之一,Python&Go,flask,python,后端

Flask常见的装饰器@app.before_request、@app.after_request、@app.error_handlers()、@login_require()以及@app.router()等等,理解了装饰器以后我们就可以往下继续阅读@app.route("/")的源码了。文章来源地址https://www.toymoban.com/news/detail-734341.html

到了这里,关于Flask 路由机制分析之一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包