Flask - 具有多个可选参数的路由

Dav*_*iro 1 python routes flask

我有一个名为 search 的路由:@app.route('/search') 是否可以向其中添加多个可选参数?例子:

@app.route('/search/pg/<int:pg>')
@app.route('/search/types/<types>')
@app.route('/search/number/<int:number>')
@app.route('/search/subject/<subject>')
Run Code Online (Sandbox Code Playgroud)

URL 中的顺序不重要,所以我可以调用 /search/pg/2 或 /search/subject/MySubject/pg/2 或 /search/types/posts/subject/MySubject/pg/2

我试过了,但它只适用于完整路径和所有参数:

@app.route('/search/pg/<int:pg>/types/<types>/subject/<subject>', methods=['GET', 'POST'])
@app.route('/search/subject', defaults={'subject', None})
@app.route('/search/pg/<int:pg>/types/<types>', methods=['GET', 'POST'])
@app.route('/search/types', defaults={'types', None})
@app.route('/search', defaults={'pg': 1}, methods=['GET', 'POST'])
@app.route('/search/pg/<int:pg>', methods=['GET', 'POST'])
def search(pg, types=None, subject=None):
    pass
Run Code Online (Sandbox Code Playgroud)

lee*_*ong 5

您可以在 URL 中使用过滤器而不是“子资源”。然后,您可以在请求中按任意顺序放置搜索参数: /search?pg=<pg>&types=<types>

在烧瓶视图函数中,您可以从请求对象中检索参数:

@app.route('/search/')
def search():
    pg = request.args.get('pg')
    ...
Run Code Online (Sandbox Code Playgroud)