【问题标题】:DRF - Define 'mandatory' fields in requestDRF - 在请求中定义“必填”字段
【发布时间】:2015-11-17 16:20:08
【问题描述】:

我正在查看文档,但我可能遗漏了一些东西。如果我想接收request 数据中的某些字段,我该如何定义它们?如果完整的字段不在request 的数据中,我想避免执行POSTGET 方法。

例子:

我需要接收(应用程序/json):

{
  "city": "Port Orange",
  "state": "FL",
  "formatted_address": "Peach Blossom Blvd 5329",
  "_zip": "32128"
}

但如果我只得到一个

{
  "city": "Port Orange",
  "state": "FL",
  "formatted_address": "Peach Blossom Blvd 5329"
}

我想返回一个带有错误消息 400 Bad Request 的响应。但不执行POST 方法。我怎么能这样做?

附言。我正在使用APIView

【问题讨论】:

  • 我可以使用request.body访问dispatch方法中的JSON字符串
  • 是的,但它是一个字符串,而不是一个字典。但我想我可以试一试。
  • 执行 json.loads(json_string) 使其成为 Python 字典。
  • 正如您在我之前的一个问题(之前在 cmets 中链接)中看到的那样,我意识到,我会试一试并让您知道。
  • @Gocht 您可以将_zip 字段添加到您的序列化程序。如果请求中未提供该字段,则序列化程序将失效并自动返回 400 响应。

标签: django django-rest-framework


【解决方案1】:

做这样的事情

return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

在您看来,从rest_framework.status 返回序列化程序错误以及正确的状态代码

【讨论】:

  • 谢谢老兄,但在哪里? 如果完整的字段不在请求的数据中,我想避免执行 POST 或 GET 方法
  • 在这种情况下,您需要重写 APIView 的dispatch 方法,该方法用于根据请求方法调用相应的方法。
  • 我试过了,比我想象的更难,请看看之前的问题:stackoverflow.com/questions/33745533/…stackoverflow.com/questions/33740697/…
  • 为什么需要避免post方法执行?
  • 我真的想避免在每个视图或序列化程序中编写验证,我想在每个视图类(GET 或 POST 之外)中编写 required_fields = {'field_a', 'field_b'} 之类的东西。我通常在使用 Django 时使用 dispatch 方法来执行此操作,并且我做到了,但是我刚刚意识到使用 DRF 不是一个好主意
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 2021-12-10
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2017-11-11
相关资源
最近更新 更多