在获取 POST 数据 django 中获取 MultiValueDictError

Posted

技术标签:

【中文标题】在获取 POST 数据 django 中获取 MultiValueDictError【英文标题】:Getting MultiValueDictError in fetch POST data django 【发布时间】:2020-12-10 15:42:34 【问题描述】:

我正在尝试获取从 html 表单接收的 GET 数据。

但它给了我 MultiValueDictError。 这也是说

During handling of the above exception, another exception occurred:

我的 HTML 代码:

<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
</head>
<body>
    <form action="home_redirect/fd" id="redirect" method="POST" enctype="multipart/form-data">
        % csrf_token %
        <input type="text" value=user name="user">
        <input type="submit">
    </form>
    <script>
        document.getElementById("redirect").submit()
    </script>
</body>
</html>

我的views.py:

def home(request):
    user = request.POST['user']
    return render(request, 'main.html', 'login': user)

【问题讨论】:

method="post",所以数据在request.POST(请求的有效载荷)中。 【参考方案1】:

在你的 html 中,我删除了 action 和脚本。像这样:

<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
</head>
<body>
    <form  id="redirect" method="POST" enctype="multipart/form-data">
        % csrf_token %
        <input type="text" value=user name="user">
        <input type="submit">
    </form>
</body>
</html>

这里我们检查的方法是POST 然后redirect 到你的url

def home(request):
    user = request.POST
    if request.method =="POST":
        return redirect('home_redirect') # home_redirect is the redirected url
    return render(request, 'afl_announcement/main.html', 'login': user)

【讨论】:

redirect的url名称是什么?? return redirect('url_name')由此可见,url_name是重定向url的名称 此参考资料可能对您有所帮助:docs.djangoproject.com/en/3.1/topics/http/shortcuts/…。当单击提交按钮到主页功能时,如果您不会在表单中重定向,则获取请求。 return redirect('https://www.google.com/') 轻松尝试重定向到 Google【参考方案2】:

在您的&lt;form&gt; 中指定:

<form action="home_redirect/fd" method="POST" enctype="multipart/form-data">
    % csrf_token %
    <input type="text" value=user name="user">
    <input type="submit">
</form>

所以你发出一个 POST 请求,数据被编码在请求的 payload 中。您通过request.POST访问这些数据:

def home(request):
    user = request.POST['user']
    return render(request, 'main.html', 'login': user)

【讨论】:

我按照您所说的进行了更改,但仍然无效。

以上是关于在获取 POST 数据 django 中获取 MultiValueDictError的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 1.3 中获取 POST 数据

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

无法从 Django request.POST 获取 POST 数据

Django request.POST 从输入中获取数据

在 Django 中获取 POST 值

在看似有效的 Django Rest Framework Post 请求上获取错误请求,要求在序列化程序数据中请求 FK