无法在 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 数据