【发布时间】:2023-03-10 12:31:01
【问题描述】:
我有错误:
访问
serializer.data后不能调用.save()。如果您需要在提交到数据库之前访问数据然后检查 'serializer.validated_data' 代替。
即使我不是访问 serialized.data 而是访问 serialized.validate_data。
这是我的代码:
views.py
class Login(APIView):
"""
Verify the login given is correct. #FIXME
"""
def post(self, request, format=None):
"""Process the user given
"""
serializer = LoginSerializer(data=request.data)
if not serializer.is_valid():
return Response(
serializer.errors,
status=status.HTTP_400_BAD_REQUEST
)
if serializer.verify_user(serializer.validated_data):
serializer.save()
return Response(
serializer.data,
status=status.HTTP_201_CREATED
)
verify_user 是我做的一个自定义函数。如果我不在该函数中使用 valid_data,则 save() 正在执行。如果不是,它会给出那个信息。在里面我不修改validated_data:
序列化器.py
class LoginSerializer(serializers.Serializer):
"""Interface fields for login api
"""
username = serializers.CharField(max_length=50)
password = serializers.CharField(max_length=255)
origin = serializers.CharField(max_length=255, required=False)
def verify_user(self, validated_data):
"""
Try to authenticate a user with given credentials
:return: True on success
"""
password_valid = validated_data['password']
username_valid = validated_data['username']
# TODO: Put in utilities
_password_crp = self.cryp_password(password_valid)
# 1 verify new table
user = User.objects.filter(
username=username_valid,
password=_password_crp
)
if user is None or user.count() == 0:
return False
return True
【问题讨论】:
标签: django python-3.x visual-studio-code