【问题标题】:Dynamic request of data from API endpoint in DjangoRestFramework从 DjangoRestFramework 中的 API 端点动态请求数据
【发布时间】:2021-02-08 00:57:00
【问题描述】:

我正在从外部来源进行一些 API 调用,但希望使其动态化,而不是手动将参考号放入我提供的 DRF UI 的视图中。

我想要的是,在我的 DRF UI 中,我应该有一个字段,当我输入参考号时,我应该从 API 获取响应,我手动成功地执行了此操作,但我想让它从DRF 用户界面。

我还想在我的 DRF UI 中获得格式更好的 JSON 响应。下面的图片可以更好地解释我的意思

Views.py

class Paystack(APIView):
    def get(self, request):
        url = "https://api.paystack.co/transaction/verify/{{REFERENCE_NO}}"
        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)

    def post(self, request):
        url = "https://api.paystack.co/transaction/verify/{{REFERENCE_NO}}"
        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)

urls.py

from django.urls import path, include
from .views import *
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register('paystack', Paystack, basename='paystack')

urlpatterns = [
    path('paystack/', Paystack.as_view(), name='paystack'),
]

目前,我的 DRF UI 看起来像这样,

【问题讨论】:

  • 关于回复,鉴于问题必须重点突出,请另开话题。

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


【解决方案1】:

如果您希望能够在 DRF UI 中获取 reference_id,则必须定义一个序列化程序并从中获取值,或者,您可以定义一个请求参考 ID 的 URL 模式。

你可以这样做

在 urls.py 中

urlpatterns = [
path('paystack/<str:reference_id>', Paystack.as_view(), name='paystack'),

]

在你看来.py

class Paystack(APIView):

    def get(self, request, reference_id):
        url = f"https://api.paystack.co/transaction/verify/{reference_id}"
        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)

【讨论】:

  • 哇,很高兴,它几乎可以按我的意愿工作,但是如果我想像帖子对象一样在我的字段中输入它以便它返回数据,我该怎么做跨度>
  • 换句话说,我想使用序列化方法
  • 但我感到困惑的是,当我使用 serializer.py 时,我还必须指定我的 models.py,因为它需要序列化来自数据库的数据中的数据。但是现在,我没有使用令人困惑的模型。提前致谢。
  • 这是正确的方法。只有在修改数据库时才必须使用 post 方法。默认情况下,DRF 不会将 kwargs 呈现为字段。但是,如果您使用 Swagger 等其他 API 文档工具,它们会提供您想要的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多