351 Stimmen

Kann Flask optionale URL-Parameter haben?

Ist es möglich, direkt einen optionalen Parameter einer Flask-URL zu deklarieren?

Derzeit gehe ich folgendermaßen vor:

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

Wie kann ich direkt sagen, dass username ist fakultativ?

485voto

Audrius Kažukauskas Punkte 13035

Eine andere Möglichkeit ist, zu schreiben

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

Aber ich vermute, dass Sie eine einzelne Route schreiben und die username als fakultativ? Wenn das der Fall ist, glaube ich nicht, dass das möglich ist.

239voto

mogul Punkte 4246

Fast dasselbe, was Audrius vor einigen Monaten ausgeheckt hat, aber Sie werden es vielleicht etwas lesbarer finden, wenn Sie die Vorgaben im Funktionskopf verwenden - so wie Sie es von Python gewohnt sind:

@app.route('/<user_id>')
@app.route('/<user_id>/<username>')
def show(user_id, username='Anonymous'):
    return user_id + ':' + username

90voto

skornos Punkte 2951

Wenn Sie wie ich Flask-Restful verwenden, ist es auch auf diese Weise möglich:

api.add_resource(UserAPI, '/<userId>', '/<userId>/<username>', endpoint = 'user')

a dann in Ihrer Ressourcenklasse:

class UserAPI(Resource):

  def get(self, userId, username=None):
    pass

35voto

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

https://flask.palletsprojects.com/en/1.1.x/quickstart/#unique-urls-redirection-behavior

16voto

Sona Punkte 149
@app.route('/', defaults={'path': ''})
@app.route('/< path:path >')
def catch_all(path):
    return 'You want path: %s' % path

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X