django - Django RF,验证反馈方法。(return Response vs raise ValidationError)
问题描述
当我在 Django 查询集中进行验证时,如果查询不满足某些参数,则以下代码成功执行并返回验证错误
if second_condition:
raise ValidationError("1 error")
else:
serializer.save()
同时,以下代码未能1 error
按预期给出响应。
if second_condition:
return Response("1 error")
else:
serializer.save()
为什么会这样?
注意:避免缩进格式
下面给出了没有格式化的完整代码
class CommentCreate(generics.CreateAPIView):
serializer_class = CommentSerializer
queryset = Comment.objects.all()
permission_classes = [IsAuthenticated]
def perform_create(self, serializer):
request_user = self.request.user
pk = self.kwargs.get('pk')
product = get_object_or_404(Product, pk=pk)
if Po.objects.filter(Q(user=request_user) & Q(item_id=pk) & Q(delivered=True)).exists():
if Comment.objects.filter(Q(author=request_user) & Q(product=product)).exists():
raise ValidationError("You have already commented")
else:
serializer.save(author=request_user, product=product)
else:
raise ValidationError("Purchase this item,prior to commenting")
解决方案
这是因为异常会在堆栈中冒泡,直到异常被 DRF 捕获并按预期处理,而返回仅返回来自钩子perform_create 的值。您可以从主视图处理程序(无论您的 django 或 DRF 中的什么)返回类似响应的实例。更多关于这里的钩子,a 没有检查返回值的含义。
推荐阅读
- reactjs - 来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“x-auth”
- android - loadUrl 正在使用不适用于本地 html 页面的链接(在片段中不是活动)
- php - 为什么删除 ajax 加载更多插件后,我的 WordPress 电子商务网站中的导航样式不正确?
- ember.js - 如何在ember js中动态更改app.scss值
- android - 使用命令行运行android模拟器
- javascript - 在单个链中更新、进入和退出选择
- javascript - javascript隐藏测试/图片
- c++ - 如何为 QUrl 重定向是否返回布尔值?
- node.js - 当我使用 window.open() 时,我无法在新窗口中打开文件
- php - 如何使用 array_flip 在 PHP 中翻转多维数组