web-dev-qa-db-fra.com

Flask peut-il avoir des paramètres d'URL facultatifs?

Est-il possible de déclarer directement un paramètre facultatif d'URL de flacon?

Actuellement, je procède de la manière suivante:

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

Est-ce que quelque chose peut me permettre de dire directement que "nom d'utilisateur" est facultatif?

185
Noor

Une autre façon est d'écrire

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

Mais je suppose que vous voulez écrire un seul itinéraire et marquer username comme facultatif? Si c'est le cas, je ne pense pas que ce soit possible.

243

Presque identique à ce que Audrius avait concocté il y a quelques mois, mais vous trouverez peut-être un peu plus de lisibilité avec les valeurs par défaut de la tête de fonction - comme vous en avez l'habitude avec python:

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

Si vous utilisez Flask-Restful comme moi, vous pouvez également:

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

a puis dans votre classe de ressources:

class UserAPI(Resource):

  def get(self, userId, username=None):
    pass
53
skornos
@app.route('/', defaults={'path': ''})
@app.route('/< path:path >')
def catch_all(path):
    return 'You want path: %s' % path

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

11
Sona
@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

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

Presque identique à skornos, mais avec des déclarations de variables pour une réponse plus explicite. Il peut fonctionner avec extension Flask-RESTful :

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 __== '__main__':
    app.run()

La méthode add_resource permet de transmettre plusieurs URL. Chacun sera acheminé vers votre Ressource .

0
yoelvis

Je sais que cette publication est vraiment ancienne, mais j’ai travaillé sur un logiciel appelé flask_optional_routes. Le code est situé à l'adresse suivante: 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 __== "__main__":
    app.run(Host='0.0.0.0', port=5000)
0
sudouser2010