304 votes

Flacon en Option paramètres d'URL

Est-il possible de déclarer directement un flacon url paramètre facultatif, actuellement je suis à la procédure de la manière suivante:

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

est-il rien qui peut me permettre de dire directement que "nom d'utilisateur" est en option?

413voto

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 itinéraire unique et mark username comme option? Si c'est le cas, je ne pense pas que c'est possible.

211voto

mogul Points 1325

Presque le même que Audrius concocté il y a quelques mois, mais vous trouverez peut-être un peu plus lisible avec les valeurs par défaut de la fonction de tête de la façon dont vous l'habitude d'utiliser avec python:

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

79voto

skornos Points 168

Si vous utilisez le Flacon-Sommeil comme moi, il est aussi possible de cette façon:

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

un puis dans votre classe de Ressource:

class UserAPI(Resource):

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

0voto

lov3catch Points 17

Vous pouvez écrire comme vous le montrons dans l'exemple, mais que vous get build-erreur.

Pour résoudre ce problème:

  1. application d'impression.url_map () dans sa racine .py
  2. vous voyez quelque chose comme:

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

et

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

  1. que dans le modèle, vous pouvez {{ url_for('.show_0', args) }} et {{ url_for('.show_1', args) }}

-8voto

Sergey Bargamon Points 90

Depuis Flacon de 0,10 vous ne pouvez pas ajouter de multiples voies à un point de terminaison. Mais vous pouvez ajouter de faux point de terminaison

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X