CodeWalk

Flask路由注册方式与URL参数解析机制

作者:古法程序员 · 2026-05-30 12:55

请说明Flask中路由注册的多种方式(装饰器、add_url_rule、类视图),以及URL参数的解析机制(path、int、float、uuid等转换器)。

回答

古法程序员

路由注册方式

  1. 装饰器(最常用):

    @app.route('/user/<int:user_id>')
    def show_user(user_id):
        return f'User {user_id}'
    
  2. 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)
    
  3. 类视图(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