可以Flask有可选的URL参数?
有没有可能直接声明一个瓶子URL可选参数?
目前我正在进行以下方式:
@user.route('/<userId>') @user.route('/<userId>/<username>') def show(userId, username=None): .................
有什么可以让我直接说“用户名”是可选的吗?
另一种方法是写
@user.route('/<user_id>', defaults={'username': None}) @user.route('/<user_id>/<username>') def show(user_id, username): pass
但我想你想写一个单一的路线,并标记username
名为可选? 如果是这样,我不认为这是可能的。
几乎与Audrius几个月前做出的一样,但是你可能会发现它在函数头中的默认值可读性更高 – 你习惯于使用python:
@app.route('/<user_id>') @app.route('/<user_id>/<username>') def show(user_id, username='Anonymous'): return user_id + ':' + username
如果你像我一样使用Flask-Restful,也可以这样做:
api.add_resource(UserAPI, '/<userId>', '/<userId>/<username>', endpoint = 'user')
然后在你的Resource类中:
class UserAPI(Resource): def get(self, userId, username=None): pass
@app.route('/', defaults={'path': ''}) @app.route('/< path:path >') def catch_all(path): return 'You want path: %s' % path
@user.route('/<userId>/') # NEED '/' AFTER LINK @user.route('/<userId>/<username>') def show(userId, username=None): pass
@user.route('/<user_id>', defaults={'username': default_value}) @user.route('/<user_id>/<username>') def show(user_id, username): # pass
你可以像你在例子中显示的那样写,但是你会得到构build错误。
要解决这个问题:
- 在你的根目录下打印app.url_map().py
- 你看到像这样的东西:
<Rule '/<userId>/<username>' (HEAD, POST, OPTIONS, GET) -> user.show_0>
和
<Rule '/<userId>' (HEAD, POST, OPTIONS, GET) -> .show_1>
- 您可以
{{ url_for('.show_0', args) }}
和{{ url_for('.show_1', args) }}
我认为你可以使用蓝图,这将使你的代码看起来更好,更整齐。
例:
from flask import Blueprint bp = Blueprint(__name__, "example") @bp.route("/example", methods=["POST"]) def example(self): print("example")
由于Flask 0.10,你不能添加多个路由到一个端点。 但是你可以添加假端点
@user.route('/<userId>') def show(userId): return show_with_username(userId) @user.route('/<userId>/<username>') def show_with_username(userId,username=None): pass