我想创建一个非基于类的表单,以方便用户在所有前端应用程序中统一登录。目前,它看起来像这样
我的序列化器类:
class EmployeeLoginSerializer(serializers.Serializer):
username = serializers.CharField(min_length=6)
password = serializers.CharField(min_length=6)
def validate_credentials(self, attrs):
print('validating')
try:
emp: Employee = Employee.objects.get(username=attrs['username'])
if crypto.verify_password(attrs['password'], emp.password_hash):
return attrs
except Exception:
raise serializers.ValidationError("Incorrect username or password")
raise serializers.ValidationError('Incorrect username or password')
我的 View 类:
class TestView(APIView):
serializer_class = EmployeeLoginSerializer
def get(self, request, *args, **kwargs):
return Response({'Message': 'Get works'})
def post(self, request, *args, **kwargs):
print(request.POST)
serializer = self.serializer_class(data=request.POST)
if serializer.is_valid():
return Response({'Message': 'Credentials were correct'})
我的问题是 serializer.is_valid()
似乎没有自动调用验证。我知道我可以手动调用 serializer.validate()
但 StackOverflow 上的所有文档和问题似乎都显示 validate()
被 is_valid()< 调用
自动,所以我觉得这不是最佳做法。有什么我想念的吗?
最佳答案
is_valid()
方法将调用 validate()
序列化器的方法和 validate<b>_FIELD_NAME()</b>
方法。
在您的代码中, validate_credentials()
似乎是常规类方法,自从 credentials
以来,DRF 无法检测到它。 不是 field
在序列化器上。
关于django-rest-framework - POST 上的 `validate()` 上未调用序列化程序 `is_valid()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56446032/