网站中有 3 个用户 tom、jerry、mike,提供了 3 个路由访问这 3 个用户的信息
路由 | 视图函数 |
---|---|
/user/tom | show_user_tom() |
/user/jerry | show_user_jerry() |
/user/mike | show_user_mike() |
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'
if __name__ == '__main__':
app.run()
三个视图函数的功能逻辑是相同的,存在明显的逻辑代码重复
Flask 中动态路由是指带有参数的页面路径,大概格式如下
/prefix/<参数>
它是一个模板,可以匹配多条路径,将参数放置在符号 < > 之间
from flask import Flask
app = Flask(__name__)
@app.route('/user/<name>')
def show_user(name):
return 'My name is %s' % name
if __name__ == '__main__':
app.run()
在 Flask 中,动态路由的参数类型默认是 string,但是也可以指定其他类型,比如数字 int 等
类型 | 说明 |
---|---|
string | 默认,可以不用写 |
int | 整数 |
float | 同 int,但是仅接受浮点数 |
path | 和 string 相似,但接受斜线 |
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
if __name__ == '__main__':
app.run()
上述代码定义了四条动态路由
动态路由 | 参数类型 | 参数 | 视图函数 |
---|---|---|---|
/user/<name> | 字符串 | name | show_user |
/age/<int:age> | int | age | show_age |
/price/<float:price> | float | price | show_price |
/path/<path:name> | path | name | show_path |
直接看上面的栗子截图就好了,这里给一个踩坑的栗子
如果 <name> 传了包含 / 的话,会报 404 哦
传整数
传浮点点数
会直接报 404 哦!
传浮点数
传整数
会直接报 404 哦!
包含 / 的时候也可以正常请求
没有 / 的时候,和 string 类型一样
@app.route('/all/<path:path>/name/<string:name>/age/<int:age>/price/<float:price>')
def show_all(name, path, age, price):
return f"path is {path}\nname is {name}\nage is {age}\nprice is {price}"