Flask路由注册方式与URL参数解析机制
请说明Flask中路由注册的多种方式(装饰器、add_url_rule、类视图),以及URL参数的解析机制(path、int、float、uuid等转换器)。
回答
古法程序员
路由注册方式:
-
装饰器(最常用):
@app.route('/user/<int:user_id>') def show_user(user_id): return f'User {user_id}' -
app.add_url_rule():def show_user(user_id): return f'User {user_id}' app.add_url_rule('/user/<int:user_id>', 'show_user', show_user) -
类视图(
MethodView):from flask.views import MethodView class UserAPI(MethodView): def get(self, user_id): return f'GET User {user_id}' def post(self): return 'Create User' app.add_url_rule('/user/<int:user_id>', view_func=UserAPI.as_view('user_api'))
URL转换器:
| 转换器 | 说明 | 示例 |
|--------|------|------|
| string | 默认,接受任意不包含斜杠的文本 | <name> |
| int | 正整数 | <int:pk> |
| float | 正浮点数 | <float:price> |
| path | 类似string但接受斜杠(类似/分段) | <path:subpath> |
| uuid | UUID字符串 | <uuid:user_id> |
| any | 接受指定值之一 | any(a, b):page |
自定义转换器:继承werkzeug.routing.BaseConverter,注册到app.url_map.converters。