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 strong> p> ma fonction: forte > p> Comment je peux le réparer? p> p>
3 Réponses :
Je pense que votre code est presque correct, mais il devrait renvoyer un objet 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. P> p> jsonResponse code> si check_field code> La valeur de retour de la fonction est pas Aucun code>. (Si l'appel de la fonction ne renvoie aucune valeur, il renvoie réellement Aucun code>)
C'est parce que la valeur renvoyée de la fonction appelée ( Vous avez quelques options: p> Conservez la fonction longue antérieure avec une fonction d'assistance qui vous permet de vous faire du 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>.
JSONResponse Code> pour le champ transduit E.g.: P>
phone = body.get('phone')
if isinstance(phone, JsonResponse):
return phone
Notez que votre Utilisation d'exceptions Évitez le code DUPLICATION: P> 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. 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)