python返回状态码和错误信息_djangorestframework中数据库验证错误后,如何返回状态码?...

我有一个类似这样的测试用例(重点是防止重复的用户配置文件):def test_create_duplicate_profile(self):

new_user = models.User(

username='bobjones',

password=';alsdfkj;asoi'

)

new_user.save()

client = APIClient()

client.force_authenticate(new_user)

response = client.post(

path='/api/profiles/'

)

self.assertEqual(response.status_code, status.HTTP_201_CREATED)

same_user = models.User.objects.get(

username='bobjones'

)

response = client.post(

path='/api/profiles/'

)

self.assertEqual(response.status_code, status.HTTP_409_CONFLICT)

client.logout()

这会导致错误(以及测试失败):

^{pr2}$

我的模型是这样的:class Profile(TimestampModerated):

id = models.BigAutoField(primary_key=True, db_column='id', null=False)

uuid = models.UUIDField(db_index=True, default=uuid_lib.uuid4(), editable=False)

user = models.OneToOneField('auth.User', on_delete=models.CASCADE, related_name='profiles', blank=False,

unique=True)

bio = models.CharField(max_length=140, blank=True, null=True)

media_url = models.URLField(blank=True, null=True)

dob = models.DateField(blank=True, null=True)

class Meta:

verbose_name_plural = "profiles"

这是序列化程序:class ProfileSerializer(serializers.ModelSerializer):

user = serializers.CharField(source='user.username', read_only=True,

validators=[UniqueValidator(queryset=Profile.objects.all())])

email = serializers.CharField(source='user.email', read_only=True)

first = serializers.CharField(source='user.first_name', read_only=True)

last = serializers.CharField(source='user.last_name', read_only=True)

last_login = serializers.DateTimeField(source='user.last_login', read_only=True)

date_joined = serializers.DateTimeField(source='user.date_joined', read_only=True)

class Meta:

model = Profile

fields = ('id', 'created', 'moderation_code', 'user', 'updated', 'uuid', 'bio', 'email',

'first', 'last', 'last_login', 'media_url', 'dob', 'date_joined')

这是我的视图集:class ProfileViewSet(viewsets.ModelViewSet):

"""

This viewsetomatically provides `list`, `create`, `retrieve`,

`update` and `destroy` actions.

"""

queryset = Profile.objects.all()

serializer_class = ProfileSerializer

authentication_classes = (SessionAuthentication,)

permission_classes = (permissions.AllowAny, IsOwnerOrReadOnly)

lookup_field = 'user'

def perform_create(self, serializer):

serializer.save(user=self.request.user)

我希望能够发回一个有效的HTTP状态代码(HTTP_40X_2;),但我似乎无法钩住验证错误。我尝试在perform_create方法中添加一些代码来引发ValidationError,但这对我来说不起作用。有什么建议吗?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值