Flask 路由机制分析之一

一、前言

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

二、Python中函数特性

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

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

1、函数中传递函数

Flask 路由机制分析之一_第1张图片

执行结果如下:

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

2、函数中定义函数

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

Flask 路由机制分析之一_第2张图片

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

3、函数返回函数

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

Flask 路由机制分析之一_第3张图片

执行结果

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

4、函数内省

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

内省常见的方法如下:

Flask 路由机制分析之一_第4张图片

三、装饰器

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

1、最简单装饰器例子

Flask 路由机制分析之一_第5张图片

执行后输出

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

2、使用@调用装饰器

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

Flask 路由机制分析之一_第6张图片

执行后输出

3、带参数的装饰器

Flask 路由机制分析之一_第7张图片

执行后结果输出

Flask常见的装饰器@app.before_request、@app.after_request、@app.error_handlers()、@login_require()以及@app.router()等等,理解了装饰器以后我们就可以往下继续阅读@app.route("/")的源码了。

你可能感兴趣的:(Python&Go,flask,python,后端)