4 votes

Ajouter plusieurs champs JSON dans le RequestParser de Flask-RestPlus

Je veux attendre une requête où request.json ressemble à :

{
  "app_name": "app",
  "model_name": "model"
}

J'ai créé le parseur suivant :

parser = reqparse.RequestParser()
parser.add_argument('app_name', location='json', required=True)
parser.add_argument('model_name',  location='json', required=True)

Et j'utilise le parseur comme suit :

class ModelList(Resource):
    @api.expect(parser)
    def get(self):
    """Obtenir tous les enregistrements de modèles correspondants"""
    ....

Cela apparaît dans le service comme suit :

entrer description de l'image ici

Mais quand j'essaie cela, ma demande est traduite comme suit :

entrer description de l'image ici

Je m'attends à ce que la requête ressemble à :

curl -X GET "http://localhost:5000/model" -H  "accept: application/json" -H  "Content-Type: application/json" -d '{"app_name": "test","model_name": "affinity"}'

et non :

curl -X GET "http://localhost:5000/model" -H  "accept: application/json" -H  "Content-Type: application/json" -d "affinity"

Qu'est-ce que je fais de mal ?

1voto

aaron Points 10209

TypeError: Demande HEAD ou GET ne peut pas avoir un corps.

Référez-vous à cette question SO pour savoir pourquoi il ne peut pas (ne devrait pas) en avoir un : HTTP GET with request body

Pour corriger, supprimez soit location='json' ou spécifiez plutôt location='args'.

parser = reqparse.RequestParser()
parser.add_argument('app_name', required=True)
parser.add_argument('model_name', required=True)

parser = reqparse.RequestParser()
parser.add_argument('app_name', location='args', required=True)
parser.add_argument('model_name', location='args', required=True)

Les deux permettront à Swagger de savoir d'envoyer les arguments dans la chaîne de requête et au parser de chercher là-bas.

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