J'ai utilisé drf
et également utilisé sérialiseur
pour vérifier l'entrée utilisateur.
Voici mon serializer.py
serializer = BoardSerializer(data=request.data) if serializer.is_valid(): ....
Et utilisez-le comme ceci.
class BoardSerializer(serializers.Serializer): user_id = serializers.IntegerField(required=True) body = serializers.CharField(required=False)
Il semble que cela ne vérifie pas le champ non défini.
Par exemple, si je demande avec {'user_id': 1, 'body': 'abc', 'akak': 1}
,
is_valid ()
ne pas saisir le champ 'akak 'et transmettez simplement les données.
Y a-t-il une fonction pour valider si les champs sont définis dans le sérialiseur ou non?
Merci.
3 Réponses :
Parce que akak n'est pas défini dans BoardSerializer Vous devez ajouter akak dans le sérialiseur. Vous pouvez ajouter le champ personnalisé akak dans le seralizer pour catach akak, essayez ceci request.data.get('akak')
Je veux dire que, je veux valider si l'entrée de l'utilisateur a un champ non défini dans le sérialiseur.
@Hide vos champs non définis sont-ils corrigés
Si vous créez un champ akak
dans un modèle, vous devez définir votre modèle dans votre sérialiseur.
class BoardSerializer(ModelSerializer): user_id = serializers.IntegerField(required=True) body = serializers.CharField(required=False) class Meta: model = your-model
Vous pouvez mettre à jour la méthode de validation comme ceci:
class BoardSerializer(serializers.Serializer): user_id = serializers.IntegerField(required=True) body = serializers.CharField(required=False) def validate(self, attrs): unknown = set(self.initial_data) - set(self.fields) if unknown: raise serializers.ValidationError("Unknown field(s): {}".format(", ".join(unknown))) return attrs
Ici, il vérifiera s'il y a des champs supplémentaires passant par le sérialiseur et comparera avec les champs existants. S'il existe, alors il lancera une erreur (ou rendra is_valid () == false
). Pour plus d'informations, vous pouvez vérifier ce alors répondez .
Exactement ce que je veux. Merci!
Double-possible de Comment faire en sorte qu'un sérialiseur rest_framework interdise les champs superflus ?