【问题标题】:How do I use a POST method to communicate with an external API in Django?如何使用 POST 方法与 Django 中的外部 API 进行通信?
【发布时间】:2021-02-20 01:47:39
【问题描述】:

我从我的导师那里得到了帮助来弄清楚 GET 命令。我正在努力使用 POST 命令。

-查看-

from django.shortcuts import render
from django.shortcuts import redirect
from django.contrib import messages
import json
import requests
from ast import literal_eval
from django.shortcuts import redirect
from rest_framework.views import APIView
from rest_framework.response import Response

def add_question(request):
    if request.method == 'POST':
        url = 'http://localhost:3000/questions/'
        payload = {'content':request.POST.get("content"), 'category':request.POST.get("category")}
        res = requests.post(url, data = (payload))
        print(res)
    return Response(res.json())

我的部分问题是,以前发布的关于该主题的大多数建议都已超过 3 年。我认为“rest_framework”模块不再用于此目的。很难说。

现在我得到的错误是:“raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)“POST /add_question HTTP/1.1”500 92794”

对我有用的 GET 方法是这样的:

def home(request):
    if request.method == 'GET':
        print('home')
    api_request = requests.get("http://localhost:3000/questions/")#.json()
    try:
        print( 'api_request='+str(api_request))
        q = literal_eval(api_request.content.decode('utf8'))
        print('q=', q, type(q))
        print( q['data'])
        json_obj = json.dumps(q['data'])
        print('json_obj=', json_obj, type(json_obj))
       
        #api = json.loads(api_request.content)
        api = json.loads(json_obj)
    except Exception as e:
        print( 'Exception e='+str(e))
        api = "Error..."
    else: 
        if request.method == 'POST':
            post_request = requests.post("http://localhost:3000/questions/")
            print(post_request)
    return render(request, 'frontend/home.html', {'api': api})

我使用的 API 是我在 Node.js 中创建的。当我尝试发帖时,我从 Node 得到的错误是:“ReferenceError:未定义问题 在 addQuestion (file:///C:/nodepract/Project05/api/routes/questions.js:60:47)"

我将视图更改为以下内容。

def add_question(request):
    if request.method == 'POST':
        url = 'http://localhost:3000/questions/'
        data = json.dumps(request.POST)
        res = requests.post(url, data)
        print("res.text = " + res.text)
        return Response(res.json())

当前出现以下错误。 “ReferenceError:未定义问题”

【问题讨论】:

    标签: django api post


    【解决方案1】:

    抛出异常是因为您从外部 API http://localhost:3000/questions/ 接收的数据不是 JSON 数据。

    要调试响应,请在调用 res.json 之前打印 res.text。

    【讨论】:

    • 这就是 res.text 所说的:“ReferenceError: question is not defined” 我还更新了我原来的帖子。
    • 介意发布堆栈跟踪吗?
    • 您遇到了与提供 localhost:3000/questions 端点的服务器有关的问题。调试那个,不是这个!
    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2023-03-12
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多