Flask(MVC/路由 三)
MVC
M
model:数据相关逻辑
程序员编写程序应有的功能(实现算法等),DBA对数据库进行数据库管理和设计
V
view:返回的内容展示
界面设计人员进行图形界面设计
C
control:控制器,视图函数
负责转发请求,对请求进行处理
路由
route
源码
1 | def route(self, rule, **options): |
去除注释部分后可以看出route
就是一个很简单的闭包
self.add_url_rule(rule, endpoint, f, **options)
这里的self
就是app
所以也可以直接通过app.add_url_rule('/',endpoint=xxx,view_func=xxx)
来添加路由
- 第一个参数:函数对应的url规则,满足条件和
app.route()
的第一个参数一样,必须以'/'
开始 - endpoint:站点,就是在使用
url_for()
进行反转的时候,这个里面传入的第一个参数就是这个endpoint
对应的值。这个值也可以不指定,那么默认就会使用函数的名字作为endpoint
的值 - view_func:对应的函数,即这个url对应的是哪一个函数,注意,这里函数只需要写函数名字,不要加括号,加括号表示将函数的返回值传给了
view_func
参数了。程序就会直接报错。 - methods:
add_url_rule
还可以传入一个methods
参数,用来指定这个函数对应的访问规制,如post,get请求等,默认是get
请求,并且只允许get
请求。当我们需要改变请求方式的时候,我们就可以传入这个参数了。
多个路由同一个处理
1 |
|
使用其他装饰器
其他装饰器要放在@app.route()下面
一个简单的打印时间的装饰器
1 | import time |
1 |
|
重定向
@app.route(redirect_to'/')
不会去执行视图函数- 在视图函数中执行
redirect()
设置默认值
- 通过
defaults
1 |
- 在视图参数中定义默认
1 |
|
视图函数的分离
随着项目的增大,视图函数需要单独放在一起,不在一个文件里了。
所以项目就变成了:
- 启动文件
- 视图函数
- 数据处理
- view
- 其他的帮助函数
main.py
1 | from flask import Flask |
urls.py
1 | from main import app |
view.py
1 | def home(): |