如何解决以json格式获取django_rest_framework中的错误信息
我想收到错误信息
{
"phone": [
"user with this phone already exists."
]
}
JSON 格式,如 {"error": "user with this phone already exists."}
来自回复
HTTP 400 Bad Request
Allow: GET,POST,HEAD,OPTIONS
Content-Type: application/json
vary: Accept
{
"phone": [
"user with this phone already exists."
]
}
但我得到的只是VM8:1 POST http://127.0.0.1:8000/users/ 400 (Bad Request)
这是我的代码:
Serializers.py
class UserCreateSerializer(UserCreateSerializer):
class Meta:
model = User
fields = ('id','first_name','last_name','email','phone','stream','school',"password",)
Models.py
class User(AbstractBaseUser,PermissionsMixin):
id = models.AutoField(primary_key=True)
first_name = models.CharField(_('first name'),max_length=30)
last_name = models.CharField(_('last name'),max_length=30,null=True)
email = models.EmailField(_('email address'),unique=True)
phone = models.CharField(_('phone'),max_length=15,unique=True)
stream = models.CharField(_('stream'),max_length=25)
school = models.CharField(_('school'),max_length=40)
tests_given = ArrayField(models.IntegerField(),null=True,blank=True)
messages = ArrayField(models.CharField(max_length=100),blank=True)
is_active = models.BooleanField(_('active'),default=True)
is_staff =models.BooleanField(_('staff'),default=False)
objects = UserManager()
USERNAME_FIELD = 'email'
required_FIELDS = ['first_name','phone']
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
def __str__(self) :
return f"{self.first_name}"
Here is what I get from postman 和and its what I get from browser when I call an API from react app
解决方法
在视图中的 serializer.is_valid() 中添加 raise_exception=True
def post(self,request):
serializer = UserCreateSerializer(request.data,many=False)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data,status=status.HTTP_202_ACCEPTED)
return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)
,
这里是你如何实现它 -
from django.db import IntegrityError
def post(self,request):
serializer = UserCreateSerializer(request.data,many=False)
serializer.is_valid(raise_exception=True):
try:
serializer.save()
except IntegrityError:
return Response({"error":"User with this phone already exists."},status=status.HTTP_406_NOT_ACCEPTABLE)
return Response("msg":"User created.",status=status.HTTP_200_OK)
如果为 User
提供的值已存在于 db 表中,您的 IntegrityError
模型将引发 phone
异常。您可以通过将 serializer.save()
放在 try.. catch
块中来处理此问题。
您可以在 views.py
中使用此代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。