可以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 

http://flask.pocoo.org/snippets/57/

 @user.route('/<userId>/') # NEED '/' AFTER LINK @user.route('/<userId>/<username>') def show(userId, username=None): pass 

http://flask.pocoo.org/docs/0.10/quickstart/#routing

 @user.route('/<user_id>', defaults={'username': default_value}) @user.route('/<user_id>/<username>') def show(user_id, username): # pass 

你可以像你在例子中显示的那样写,但是你会得到构build错误。

要解决这个问题:

  1. 在你的根目录下打印app.url_map().py
  2. 你看到像这样的东西:

<Rule '/<userId>/<username>' (HEAD, POST, OPTIONS, GET) -> user.show_0>

<Rule '/<userId>' (HEAD, POST, OPTIONS, GET) -> .show_1>

  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