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?

15voto

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

8voto

alfredo Punkte 444

Fast das Gleiche wie skornos, aber mit Variablendeklarationen für eine eindeutigere Antwort. Es kann arbeiten mit Flask-RESTful-Erweiterung :

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class UserAPI(Resource):
    def show(userId, username=None):
    pass

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

if __name__ == '__main__':
    app.run()

Les add_resource Methode können mehrere URLs übergeben werden. Jede dieser URLs wird an Ihre Website weitergeleitet. Ressource .

5voto

sudouser2010 Punkte 171

Ich weiß, dass dieser Beitrag sehr alt ist, aber ich habe an einem Paket gearbeitet, das dies tut und flask_optional_routes heißt. Der Code befindet sich unter: https://github.com/sudouser2010/flask_optional_routes .

from flask import Flask

from flask_optional_routes import OptionalRoutes

app = Flask(__name__)
optional = OptionalRoutes(app)

@optional.routes('/<user_id>/<user_name>?/')
def foobar(user_id, user_name=None):
    return 'it worked!'

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

0voto

lov3catch Punkte 109

Sie können schreiben, wie Sie im Beispiel zeigen, aber dann erhalten Sie Build-Fehler.

Um dies zu beheben:

  1. print app.url_map () in you Root .py
  2. sehen Sie etwas wie:

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

y

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

  1. als in der Vorlage können Sie {{ url_for('.show_0', args) }} y {{ url_for('.show_1', args) }}

-8voto

Sergey Bargamon Punkte 132

Seit Flask 0.10 kann man nicht mehr mehrere Routen zu einem Endpunkt hinzufügen. Aber man kann einen gefälschten Endpunkt hinzufügen

@user.route('/<userId>')
def show(userId):
   return show_with_username(userId)

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

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