python-如何引发错误/在Django REST中返回{“ foo”:[“此字段是必需的.”]}响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何引发错误/在Django REST中返回{“ foo”:[“此字段是必需的.”]}响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2025字,纯文字阅读大概需要3分钟。
内容图文
假设我有一个视图,并且需要在调用serializer.save之前检查是否已给出字段,以确保我没有字典键错误:
class BarView(CreateAPIView):
serializer_class = BarSerializer
queryset = Bar.objects.all()
def perform_create(self, serializer):
if 'foo' not in self.request.data:
raise ParseError('foo field required.')
foo = get_object_or_404(Foo, pk=self.request.data['foo'])
if foo.counter == 10:
raise ParseError('foo limit reached.')
return serializer.save(user=self.request.user, foo=foo)
而不是返回“需要foo字段”.我想返回与Django REST返回的消息相同的消息,例如{“ foo”:[“此字段为必填.”]}
有一个更好的方法吗?也许仅通过序列化程序验证foo字段?
更新:我忘了提到用户字段也是必需的.
Bar的模型是:
class Bar(models.Model):
user = models.ForeignKey(User, db_index=True, editable=False)
foo = models.ForeignKey(Foo, db_index=True)
解决方法:
是,
只需看一下文档:Validation
(我假设foo字段是Bar模型的一部分,如果不是,请将其添加到Meta中的字段中):
向BarSerializer添加验证:
class BarSerializer(serializers.ModelSerializer):
def validate_foo(self, value):
if not value:
raise serializers.ValidationError("foo field required.")
if Foo.objects.filter(pk=value, counter__gte=10).exists():
raise serializers.ValidationError("foo limit reached.")
return value
class Meta:
model = Bar
然后通过扩展以下内容创建您的视图:
from rest_framework.exceptions import ValidationError
class MyCreateAPIView(CreateAPIView):
def post(self, request, *args, **kwargs):
try:
return super(BarView, self).post(request, *args, **kwargs)
except ValidationError as e:
return Response(e.detail, , status=status.HTTP_400_BAD_REQUEST)
def create(self,request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
try:
self.perform_create(serializer)
except DjangoValidationError as e:
raise ValidationError(e.messages)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def perform_create(serializer):
# do your stuff
serializer.save()
内容总结
以上是互联网集市为您收集整理的python-如何引发错误/在Django REST中返回{“ foo”:[“此字段是必需的.”]}响应全部内容,希望文章能够帮你解决python-如何引发错误/在Django REST中返回{“ foo”:[“此字段是必需的.”]}响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。