【问题标题】:Getting MultiValueDictError in fetch POST data django在获取 POST 数据 django 中获取 MultiValueDictError
【发布时间】:2023-04-06 07:14:01
【问题描述】:

我正在尝试获取从 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(请求的有效载荷)中。

标签: javascript html python-3.x django django-views


【解决方案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})

【讨论】:

  • 我按照您所说的进行了更改,但仍然无效。
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 2016-07-18
  • 2021-10-10
  • 1970-01-01
  • 2022-01-08
  • 2016-01-24
  • 2017-04-07
  • 2020-08-29
相关资源
最近更新 更多