Flask 中的动态路由
在前面章节使用的路由中,我们已经知道了一条固定的路径和一个处理函数相绑定,当访问这条路径时会触发相应的处理函数。路由中的路径是固定的,一条路径对应一个处理函数,无法处理复杂的情况。本小节介绍动态路由,路由中的路径是一个包含有参数的模板,可以匹配多条路径。
Tips :本节课所有的代码已经上传到 Github 可以点击这里进行下载。
1. 静态路由
在前面章节使用的路由中,路径是固定的、不变的。例如,网站中有 3 个用户 tom、jerry、mike,提供了 3 个路径访问这 3 个用户的信息,如下表所示:
路径 | 处理函数 |
---|---|
/user/tom | show_user_tom() |
/user/jerry | show_user_jerry() |
/user/mike | show_user_mike() |
编写程序 static.py,包含有 3 个路由:
from flask import Flask
app = Flask(__name__)
@app.route('/user/tom')
def show_user_tom():
return 'My name is tom'
@app.route('/user/jerry')
def show_user_jerry():
return 'My name is jerry'
@app.route('/user/mike')
def show_user_mike():
return 'My name is mike'
app.run()
在第 4 行,将路径 ‘/user/tom’ 与处理函数 show_user_tom () 绑定;在第 8 行,将路径 ‘/user/jerry’ 与处理函数 show_user_jerry () 绑定;在第 12 行,将路径 ‘/user/mike’ 与处理函数 show_user_mike () 绑定。
程序 static.py 存在一个明显的问题:3 个页面处理函数的功能逻辑是相同的,存在有明显的代码重复。在下个小节,使用动态路由解决代码重复的问题。
2. 动态路由
Flask 中动态路由是指带有参数的页面路径,如下所示:
/prefix/<参数>
它是一个模板,可以匹配多条路径,将参数放置在符号 <和> 之间。
针对上一节的例子,页面路径 /user/
- /user/tom
- /user/jerry
- /user/mike
因此, 只需要编写一个页面处理函数即可处理以上 3 个页面 ,编写程序 dynamic.py:
from flask import Flask
app = Flask(__name__)
@app.route('/user/<name>')
def show_user(name):
return 'My name is %s' % name
app.run()
在第 4 行,定义了动态路径 /user/
比较上一个小节 static.py 和本小节的 dynamic.py,通过动态路由可以使用一个处理函数处理一批相关的页面路径,在很多应用场景中是必需的。
3. 转换器
在 Flask 中,参数类型默认是 string,但是也可以指定其他类型,比如数字 int 等,如下所示:
/prefix/<类型转换器:参数>
类型转换器将默认的字符串类型转换为指定的类型,Flask 中主要有以下 4 种基本类型转换器:
类型 | 说明 |
---|---|
string | 默认,可以不用写 |
int | 整数 |
float | 同 int,但是接受浮点数 |
path | 和 string 相似,但接受斜线 |
4. 类型转换的例子
本节编写程序 conv.py 演示转换器的功能:
from flask import Flask
app = Flask(__name__)
@app.route('/user/<name>')
def show_user(name):
return 'My name is %s' % name
@app.route('/age/<int:age>')
def show_age(age):
return 'age is %d' % age
@app.route('/price/<float:price>')
def show_price(price):
return 'price is %f' % price
@app.route('/path/<path:name>')
def show_path(name):
return 'path is %s' % name
app.run()
程序 conv.py 中定义了 4 条动态路由,如下表所示:
动态路由 | 参数类型 | 参数 | 处理函数 |
---|---|---|---|
/user/ |
字符串 | name | show_user |
/age/ |
int | age | show_age |
/price/ |
float | price | show_price |
/path/ |
path | name | show_path |
当用户访问路径时,与动态路由匹配并提取出相应的参数,处理函数返回如下:
动态路由 | 实际路径 | 返回值 |
---|---|---|
/user/ |
/user/tom | My name is tom |
/age/ |
/age/26 | age is 26 |
/price/ |
/price/31.4 | price is 31.4 |
/path/ |
/path/abc/xyz | path is abc/xyz |
5. 小结
本节讲解了 Flask 中的动态路由的概念、如何提取路由中的参数和设置参数类型,使用思维导图概括如下:
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。