【问题标题】:How to get a better formatted JSON Response in DjangoRestFramework UI如何在 DjangoRestFramework UI 中获得格式更好的 JSON 响应
【发布时间】:2021-02-09 12:59:24
【问题描述】:

我在 DRF 中有一个 APIVIEW,我在其中编写了一些视图以获得一些响应,我希望获得格式更好的 JSONResponse。

Views.py

class Pay(APIView):
    def get(self, request):
        url = "https://api.paystack.co/transaction/verify/262762380"
        payload = {}
        files = {}
        headers = {
            'Authorization': 'Bearer SECRET_KEY',
            'Content-Type': 'application/json'
        }

        response = requests.request("GET", url, headers=headers, data= payload, files=files)
        return Response(response)

这是我想要改进的格式错误的 JSONResponse 的图形表示。谢谢

【问题讨论】:

  • 不确定你想在这里实现什么,但你实际上是在构造一个新的 requests.request 对象并将其作为数据传递给 DRF Response 方法,默认情况下将其呈现为 JSON。结果是你所期望的。要返回您自己的有效负载数据,只需将其作为 Pyhton 列表或 dict(甚至标量值)传递给 Response 方法。更好:看看Serializers,根据您的模型类为您完成无聊的工作。
  • 感谢@jlapoutre 的贡献,但这里的问题是我没有使用任何模型,这就是为什么我不知道如何去做。如果你能帮助我,我不介意。谢谢
  • 好的,所以通用解决方案仍然成立:创建您想要作为一组简单 Python 对象返回的结构并返回它。将添加一个答案来做一些代码格式化...

标签: json django api django-rest-framework django-views


【解决方案1】:

因此,如果您没有模型,而是您以其他方式获得的某种数据结构(例如来自第三方 API 的响应),则只需返回一个带有该数据结构作为参数的 Response。

在这种情况下,您实际上是在 3rd 方 API 和您的客户端之间充当一种代理,如果这是您想要的(确保不要泄露私人数据!)

例子:

class Pay(APIView):
    def get(self, request):
        url = "https://api.paystack.co/transaction/verify/262762380"
        payload = {}
        files = {}
        headers = {
            'Authorization': 'Bearer SECRET_KEY',
            'Content-Type': 'application/json'
        }

        # no need for 'data' and 'files' arguments with method GET
        response = requests.get(url, headers=headers)

        # do some validation, at least check for response.status_code
        if response.status_code == 200:
            data = response.json()
            return Response(data)

使用requests library 有更多可能性。

【讨论】:

  • 非常感谢您的回答,先生,我在干净的 JSON 响应中得到了完美的结果,与其他粗糙的响应不同
  • 先生,如果您能帮助解决这个稍微相关的问题,我会很高兴,stackoverflow.com/questions/64551404/…
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多