【问题标题】:Making my Django Views into a DjangoRestFramework API Endpoint将我的 Django 视图变成 DjangoRestFramework API 端点
【发布时间】:2021-02-03 01:16:17
【问题描述】:

我有一个支付验证视图,它使用了一些参数,如密钥和其他一些身份验证参数。

我想将视图变成一个 API 端点,这样我就可以输入参数并返回响应。

我熟悉制作基本端点 CRUD 端点,它在 models.py 中有类,但这没有。

P.S:我还使用了一个具有响应的外部 API,我所要做的就是发送所需的参数,然后如果它们正确,它会返回响应。

Views.py

def verify_paystack_payment(request):
    url = "https://api.paystack.co/transaction/verify/262762380"

    payload = {
        "email": "email@yahoo.com",
        "amount": "10000",
        "currency": "NGN",
        "reference": "262762380",
        "metadata": {
            "custom_fields": [
                {
                    "display_name": "Mobile Number",
                    "variable_name": "mobile_number",
                    "value": "+2348012345678"
                }
            ]
        }
    }

    files = {}

    headers = {
      'Authorization': 'Bearer **MY SECRET KEY**',
      'Content-Type': 'application/json'
    }

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

    return render(request, "transaction/pay.html")

【问题讨论】:

  • “我想把视图变成一个 API 端点,这样我就可以输入参数并返回响应。” 请您详细解释一下。我很难理解它。

标签: python django django-rest-framework django-views payment-processing


【解决方案1】:

如果您使用的是 Django 1.7+,那么您可以使用 JsonResponse

from django.http import JsonResponse

def verify_paystack_payment(request):
    url = "https://api.paystack.co/transaction/verify/262762380"

    payload = {
        "email": "email@yahoo.com",
        "amount": "10000",
        "currency": "NGN",
        "reference": "262762380",
        "metadata": {
            "custom_fields": [
                {
                    "display_name": "Mobile Number",
                    "variable_name": "mobile_number",
                    "value": "+2348012345678"
                }
            ]
        }
    }

    files = {}

    headers = {
      'Authorization': 'Bearer **MY SECRET KEY**',
      'Content-Type': 'application/json'
    }

    response = requests.request("GET", url, headers=headers, data= payload, files=files)
    return JsonResponse({"data":response.text})

在 Django 1.7 之前你会这样做:

import json 
from django.http import HttpResponse

def verify_paystack_payment(request):
    #Function code
    return HttpResponse(json.dumps({"data":response.text}),content_type="application/json")

【讨论】:

  • ` TypeError at /api/paystack/verify_paystack_payment/ 响应类型的对象不是 JSON 可序列化的`我收到此错误
  • 只发送响应内容而不是响应对象。
  • 我在return 步骤中将response 替换为response.text。现在有效了吗?
  • 是的,我现在在我的模板中得到了响应,这很棒。但我希望实现的主要目标是能够使用路由器获取 DRF 模板,然后我将能够输入动态引用,然后返回响应
猜你喜欢
  • 2021-02-08
  • 1970-01-01
  • 2019-04-22
  • 2015-10-27
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多