无法在 django 视图中从 POST 检索数据

Posted

技术标签:

【中文标题】无法在 django 视图中从 POST 检索数据【英文标题】:Can't retrieve data from POST in django view 【发布时间】:2020-11-14 16:31:04 【问题描述】:

我在 django 视图中从 POST 检索数据时遇到问题。我将带有 axios 的 React 表单值发送到我的 django 后端。我相信数据被放入 POST 但不知何故似乎 POST 中没有任何数据,我无法在我的 django 视图中访问它。这里可能有什么问题? (我还可以在控制台中看到值已成功提交)

源代码:Django views.py:

@csrf_exempt
def send(request):
    if request.method == "POST":
        data = request.body('name')
        send_mail('Test 1', data, 'austin.milk1@gmail.com', ['lowoko9513@gomail4.com',], fail_silently=False)
    return redirect('/api/')

React 表单处理:

handleFormSubmit = (event) => 
        const name = event.target.elements.name.value;
        const email = event.target.elements.email.value;
        event.preventDefault();
        axios.post('http://127.0.0.1:8000/api/send', 
            name: name,
            email: email
        )
        .then(res => console.log(res))
        .catch(error => console.err(error));
    ;

新错误:

File "C:\Users\austi\PycharmProjects\Fitex#1\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\austi\PycharmProjects\Fitex#1\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\austi\PycharmProjects\Fitex#1\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\austi\PycharmProjects\Fitex#1\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\austi\PycharmProjects\Fitex5\backend\src\training\api\views.py", line 78, in send
    data = request.body('name')
TypeError: 'bytes' object is not callable

【问题讨论】:

这是因为您发送的是 JSON 而不是 FormData,POST 字段用于表单。你想要request.body。 ***.com/a/3020756/490790 【参考方案1】:

这是因为您发送的是 JSON 而不是 FormData,POST 字段用于表单。你想要 request.body。

这是重复的问题:https://***.com/a/3020756/490790

进一步更新

您正试图将字符串(或本例中的字节)作为函数调用。 request.body 不是函数。如果你想得到一个字段,你必须将它解析为 JSON,然后像字典一样访问它。

data = json.loads(request.body)
name = data['name']

【讨论】:

但最后我应该如何定义 json 在我看来:NameError: name 'json' is not defined? 请看:***.com/a/47413659/490790【参考方案2】:

您也可以通过以下方式直接访问:

email = request.data['email']
name = request.data['name']

【讨论】:

这仅适用于您安装了djangorestframework。默认情况下,Django 不知道如何反序列化 JSON,您需要手动执行此操作或使用 DRF 助手。

以上是关于无法在 django 视图中从 POST 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

在没有表单的情况下从 Django 中的 jQuery 检索 POST 数据

无法在 Django 视图中获取 http POST 数据

在 Swift 中从 Firebase 检索数据的问题

在Django中从POST接收数据后发送电子邮件[重复]

无法在 aws amazon linux v2 内的 django 视图函数中检索或创建数据库对象

在Django视图函数中无法检索AJAX请求数据值。