Python-flask框架开发
flask开发规范
Hello_world
对于flask框架的开发,一般都是遵循着如下格式模版:
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

路由规范
- 路由定义的路径名称应尽量与其绑定的函数名称应该尽量相同
项目目录
- 对于一个比较复杂的项目结构,该结构的目录如下:
1 | my_flask_app/ |
flask路由
- 在flask中路由并不是指网络层的那些东西,而是web应用将
URL映射到python函数的机制。flask路由是flask应用的核心部分,用于处理不同的URL的请求,并将请求的处理委托给相应的视图函数。 - 下面是关于Flask路由的详细说明:
- 定义路由:
@app.route("/path")装饰器定义URL和视图函数的映射。 - 路由参数:通过动态部分在
URL中传递参数 - 路由规则:使用类型转换器指定URL参数传递的类型,字符串、整数、浮点数、路径。
- 请求方法:指定允许的HTTP请求方法。
- 路由函数返回:视图函数可以返回不同的类型响应。
- 静态文件和模版:管理静态文件和动态渲染HTML模版。
- 路由优先级:确保路由顺序正确,以避免意外匹配结果。
- 定义路由:
定义路由
路由的定义其实就是如下两步:
- 第一步先在一行中写上
@app.route("/path")。 - 第二步紧接着定义一个函数,这个函数被称为视图函数,例子就用
hello_world的这个例子
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |
参数接收
- 在定义路由的时候定义这样的形式:
@app.route('/say/<name>'),这就是表示将URL请求的一些路径参数传递给函数,这个name其实是一个变量名称。 - 当使用
URL访问/say/xxx,此时name=xxx就会作为参数传递给其绑定的函数,所以路由绑定的函数就会存在name这个参数,而这个xxx是被用户决定的。 - 例子:对于如下代码,当我们访问
/say/aaa,name='aaa',此时就会返回hello aaa;如果访问/say/bbb,此时就会返回hello bbb
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |


路由规则
- 对于参数的接收可以指定一个规则,使得接收的参数为整型会绑定一个函数,接收的参数为字符串类型会绑定另一个函数。这个规则的定义如下:
1 | # <数据类型:变量名> |
- 例子如下:
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |


请求方法
-
这里的请求方法指的是
http协议的请求方法,常见的http协议的请求方法有:GET、POST、PUT、DELETE。这里指简单介绍GET请求和POST请求。 -
定义的形式如下:选定传入的参数为
methods,methods为一个列表类型,它需要指定为接收的方法类型,比如只处理get请求,就只写['GET'];如果需要处理get、post请求,就需要写['GET','POST']
1 |
- 例子如下:
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |



视图函数返回
视图函数的返回可以返回字符串、html、标签、json文件、自定义请求响应,这里直接从例子入手。
- 例子1:返回
json
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

- 例子2:返回
字符串
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

- 例子3:返回
html
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

- 例子4:返回自定义请求
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

静态文件与模版
-
静态文件和模版:管理静态文件和动态渲染HTML模版。例如:
.html、.png、.jpg文件 -
这个其实也是路由函数的一种返回类型,是直接返回文件。需要使用
flask中的flask.render_template()函数,使用flask.render_template(),该函数会从当前目录下的一个名为templates的目录作为根目录去寻找对应的文件。

1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

路由优先级
- 当存在两个相同的路由时,使用
URL访问路由函数时,到底是先调用哪个路由函数,这个就需要使用路由优先级确定。 - 路由优先级原则:哪个路由函数先被定义,先被定义的路由函数优先级就会更高。访问该路径的时候,使用的路由函数始终是
func1
1 | import flask # 也可以使用 from flask import *,但是这样导入可能会造成函数名称污染 |

flask视图函数
- 视图函数其实就是与
flask路由绑定起来的函数,该函数被称为视图函数。视图函数一般最经常用来处理前端发送过来的请求,后端的逻辑一般都在flask视图函数中编写。 - 对于
flask视图函数,主要就是前后端交互的处理,一般就是接收和处理前端发送过来的数据,然后将处理结果返回给前端,从而达到前后端交互目的。
获取请求数据
返回响应
处理请求相应
处理错误
视图函数装饰器
-
函数装饰器是
python的一个特性,而flask框架有一些定义好的函数装饰器,接下来就是要学习flask框架的视图函数装饰器。 -
对于视图函数修饰器,效果有点类似于
@app.route这个功能,route是对视图函数将URL进行绑定。而视图函数修饰器也类似于用来绑定函数的。接下来介绍几个修饰器的关键字,用户还可以自定义视图函数修饰器:- 路由相关:
@app.get('/path'):相当于@app.route('/path', methods=['GET']),只响应GET请求@app.post('/path'):相当于@app.route('/path', methods=['POST']),只响应post请求@app.put('/path')、@app.delete('/path')、@app.patch('/path'):
分别对应 PUT、DELETE、PATCH 请求。@app.route('/path',methods=['GET','POST']):可以处理多个请求。
- 请求钩子:
@app.before_request:在每个请求之前运行的函数。@app.after_request:在每个请求处理之后的函数@app.teardown_request:在请求结束之后运行的函数,用于清理工作
- 错误处理修饰器:
@app.errorhandler(404):捕获404错误,返回自定义页面@app.errorhandler(Exception):捕获所有异常,可返回统一的错误信息
- 蓝图相关修饰器:
@bp.route('/path'):类似于@app.route('/path'),但是只作用于蓝图@bp.before_app_request:只作用于蓝图的钩子函数。
- 路由相关:
flask模版渲染
- 在web开发中,模版一般是指带有占位符的
HTML文件,这样其实就能根据一些用户信息或者用户的请求在前端显示不同的信息。
项目1—登录界面
阶段1
阶段2
阶段3
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!

