簡體   English   中英

Django Rest 框架:如何在序列化程序之前請求數據驗證?

[英]Django Rest Framework: How to request data validate before serializers?

我想在 UserSerializer 之前驗證 email 變量,然后返回過濾后的數據。 以下代碼有效; 但我兩次聲明了“序列化程序”。 如果我想使用一次序列化程序,我該怎么做?

視圖.py

@api_view(['GET'])
def get_user(request):
    email = request.data.get('email')
    serializer = UserSerializer(data=request.data)

    if serializer.is_valid():
        Users = User.objects.filter(email=email)
        serializer = UserSerializer(Users, many= True)

        return Response({"status": "success", "data": serializer.data})
    else:
        return Response({"status": "errors", "data": serializer.errors})

序列化程序.py

class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(required=True)
    phone = serializers.CharField(required=False)
    sex = ChoiceField(required=False, choices=User.TYPE_CHOICES)

    class Meta:
        model = User
        fields = ('id', 'email', 'phone', 'name','sex', 'updated', 'created')

模型.py

class User(models.Model):
    TYPE_CHOICES = (
        ('0', 'men'),
        ('1', 'girl'),
        ('2', 'nobody'),
    )

    email = models.EmailField(unique=True, max_length=50)
    phone = models.TextField(unique=True, max_length=11)
    name = models.TextField(default="AKA")
    sex = models.CharField(
        max_length=2,
        choices=TYPE_CHOICES,
        default="0"
    )
    updated = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "users"

用於驗證 Email 的用戶 anether 串行器

class EmailSerializer(serializers.Serializer):
    email = serializers.EmailField(required=True)
@api_view(['GET'])
def get_user(request):
    
    serializer = EmailSerializer(data=request.data)

    if serializer.is_valid():
        email = serializer.validated_data['email']
        Users = User.objects.filter(email=email)
        serializer = UserSerializer(Users, many= True)

        return Response({"status": "success", "data": serializer.data})
    else:
        return Response({"status": "errors", "data": serializer.errors})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM