Я новичок в Django / Django Rest Framework.
Я хочу пользовательское сообщение, то есть "staus" вместе с пользовательским сообщением об ошибке.
Сообщение об ошибке может быть.
- Электронная почта не найдена
- Неверный пароль
Требуемый формат вывода
#status_code 200 ok
{
"status":"failure",
"status_message":"Email not found"
}
View.py
class UserLogin(APIView):
permissions_class = [AllowAny]
serializer_class=UserLoginSerailizer
def post(self, request, *args, **kwargs):
mydata = request.data
serializer=UserLoginSerailizer(data=mydata)
if serializer.is_valid():
new_data=serializer.data
return Response({"status":"success","message":"success","result":new_data},status=status.HTTP_200_OK)
return Response({"status":"failure","message":serializer.errors},status=status.HTTP_200_OK)
Serializer.py
class UserLoginSerailizer(ModelSerializer):
email_id=EmailField(required=True)
password=CharField(required=True,error_messages={'required':'Password field is required.'})
jwt_token=CharField(allow_blank=True,read_only=True)
class Meta:
model=User
fields = [
'email_id',
'password',
'jwt_token',
]
extra_kwargs ={"password":{"write_only":True}}
def validate(self,data):
user_obj=None
email_id=data.get("email_id")
password=data["password"]
user=User.objects.filter(email=email_id)
if user.exists():
user_obj =user.first()
else:
raise ValidationError({"error_message":"Email not found"})
if user_obj:
if not user_obj.check_password(password):
raise ValidationError({"error_message":"Wrong password"})
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user_obj)
data["jwt_token"]=jwt_encode_handler(payload)
return data
Токовый выход
{
"status": "failure",
"status_message": {
"error_message": [
"Email not found"
]
}
}
Я попробовал другой способ настройки ValidationError, но вместо 200 кодов состояния он использовал 400 неверных запросов, и я также не смог добавить пользовательское сообщение. Я не уверен, что лучший способ достичь этого, поэтому я попытался так. Пожалуйста, дайте мне лучший способ выполнить мое требование