0
votes

Retourne JsonResponse de la fonction dans Django Repos

J'ai une requête dans laquelle tous les champs sont nécessaires. Je veux m'assurer qu'ils sont pleins. Il s'avère beaucoup de code dupliqué. J'ai donc décidé de créer une fonction sur laquelle je passe des valeurs d'un champ. Mais la demande continue plutôt que d'envoyer un code de réponse 400.

mon point de vue.py xxx

ma fonction: xxx

Comment je peux le réparer?


0 commentaires

3 Réponses :


0
votes

Je pense que votre code est presque correct, mais il devrait renvoyer un objet jsonResponse si check_field La valeur de retour de la fonction est pas Aucun . (Si l'appel de la fonction ne renvoie aucune valeur, il renvoie réellement Aucun ) xxx

de toute façon, je vous suggère que vous devriez essayer Django Repose framework's Serializer . Cela fait facilement ces problèmes de vérification des paramètres.


0 commentaires

0
votes

C'est parce que la valeur renvoyée de la fonction appelée ( check_field (téléphone) code>) n'est pas propagée au-delà de l'appelant - la fonction payer code>. C'est Pay Code> La responsabilité de prendre des décisions basées sur le retour de check_field code>.

Vous avez quelques options: p>

  • Conservez la fonction longue antérieure avec une fonction d'assistance qui vous permet de vous faire du JSONResponse Code> pour le champ transduit E.g.: P>

    phone = body.get('phone')
    if isinstance(phone, JsonResponse):
        return phone
    


0 commentaires

0
votes

Notez que votre check_field code> ne fonctionne pas tel quel, car champ code> fait référence à la valeur et non au nom de la variable que vous écrivez.

Utilisation d'exceptions Évitez le code DUPLICATION: P>

from django.core.exceptions import ValidationError

def pay(request):
    try
        body = request.body.decode('utf-8')
        if not body:
            raise ValidationError('empty query')
        body = json.loads(body)
        for field_name in ['phone', 'amount', 'merchant_name']:
            check_field(body, field_name)
    except ValidationError as error:
        return JsonResponse({
            'status': 'failed',
            'errors': {
                'code': 400,
                'message': error.message
            },
        })

 def check_field(data, field_name):
     if not data.get(field_name):
         raise ValidationError('{} field is empty'.format(field_name)


0 commentaires