xao*_*_xv 5 django django-rest-framework
我的序列化器很简单serializers.py,我想使用其中一个字段进行验证,validate(self, data)但它不起作用。
这是我的代码:
class DataUpdateSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField(write_only=True)
def validate(self, data):
if data['username'] != 'test':
raise serializers.ValidationError('Wrong username')
return data
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有帮助,但这是我的views.py
class DataUpdateAPI(views.APIView):
serializer_class = DataUpdateSerializer
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('pass')
return Response("Just test response")
Run Code Online (Sandbox Code Playgroud)
我不知道这段代码有什么问题。先谢谢您的帮助!
APIView是一个不使用属性的低级视图类serializer_class。如果你想使用它,你必须自己实例化并调用序列化器:
import rest_framework
class DataUpdateAPI(views.APIView):
def post(self, request):
serializer = DataUpdateSerializer(data=request.data)
if serializer.is_valid():
# do smth with serializer.data, it's valid now
return Response("Just test response")
return Response(serializer.errors, status=rest_framework.status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
如果您想要更高级的使用,则serializer_class在 和 子类中实现的调用GenericAPIView。例如,CreateAPIView已经实现了post反序列化和验证的方法,因此您不必重新发明轮子:
class DataUpdateSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField(write_only=True)
def validate(self, data):
if data['username'] != 'test':
raise serializers.ValidationError('Wrong username')
return data
def create(self, validated_data):
print('my data is already validated here', validated_data)
class DataUpdateAPI(rest_framework.generics.CreateAPIView):
serializer_class = DataUpdateSerializer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6800 次 |
| 最近记录: |