Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django表单未验证_Python_Django - Fatal编程技术网

Python Django表单未验证

Python Django表单未验证,python,django,Python,Django,我有一个表单,该表单应通过模板进行验证,如下所示: from django.shortcuts import render from django.forms import Form from django import forms from django.http import HttpResponse import MyIB.settings import os class MainForm(Form): name = forms.CharField() subject =

我有一个表单,该表单应通过模板进行验证,如下所示:

from django.shortcuts import render
from django.forms import Form
from django import forms
from django.http import HttpResponse
import MyIB.settings
import os

class MainForm(Form):
    name = forms.CharField()
    subject = forms.CharField()
    text = forms.Textarea()
    file = forms.FileField()
    password = forms.CharField()

def mainpage(request):
    if request.method == 'POST':
        form = MainForm(request.POST, request.FILES)

        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponse('Ok')
        else:
            return HttpResponse('not ok')

    form = MainForm()
    return render(request, "main.html", {'form': form})

def handle_uploaded_file(file):
    name = file.name

    with open(os.path.join("static\img", "{0}".format(name)), 'wb+') as destination:
        for chunk in file.chunks():
            destination.write(chunk)
正如我的模板所示:

{% load staticfiles %}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="UTF-8">
    <title>{{ siteTitle }}</title>
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/main.css">
</head>
<body>
{% include 'header.html' %}

<form method="post">
    {% csrf_token %}
    <label class="label" for="name">Name</label>
    <input id="namebox" type="text" name="name" />
    </br>
    <label class="label" for="subject">Subject</label>
    <input id="subjectbox" type="text" name="subject" />
    </br>
    <label class="label" for="text">Text</label>
    <textarea id="textedit" name="text"></textarea>
    </br>
    <label class="label" for="file">File</label>
    <input type="file" name="file" />
    </br>
    <label class="label" for="password">Password</label>
    <input type="password" id="passwordbox" name="password" />
    </br>
    <input type="submit" />
</form>

</body>
</html>
{%load staticfiles%}
{{siteTitle}}
{%include'header.html%}
{%csrf_令牌%}
名称

主题
正文
文件
密码
但每次我通过模板中的表单发送内容时,它都没有经过验证,并且会切换到“不确定”。请帮忙。谢谢

编辑当前状态:

<form enctype="multipart/form-data" method="post">
    {% csrf_token %}
    <table>
    <ul>
        {{ form.as_table }}
    </ul>

    </table>
    <input type="submit" value="Submit" />
</form>

{%csrf_令牌%}
    {{form.as_table}}

有几点建议:

  • 当需要时,必须使用正确的
    标记:

    为了上传文件,您需要确保元素将enctype正确定义为“多部分/表单数据”:

    
    
    这可能是您的验证问题的原因

  • FormsAPI功能强大,可以处理以下事情:

    您应该使用此选项,因为默认呈现器还将显示当前未呈现的表单字段错误(因此您无法知道哪个字段未能验证-如果呈现错误,您将知道问题出在文件输入上)

    或者,你需要这样做


  • 有几点建议:

  • 当需要时,必须使用正确的
    标记:

    为了上传文件,您需要确保元素将enctype正确定义为“多部分/表单数据”:

    
    
    这可能是您的验证问题的原因

  • FormsAPI功能强大,可以处理以下事情:

    您应该使用此选项,因为默认呈现器还将显示当前未呈现的表单字段错误(因此您无法知道哪个字段未能验证-如果呈现错误,您将知道问题出在文件输入上)

    或者,你需要这样做


  • 还是不行!我使用了
    {{form.as_table}}
    ,现在它正确地显示了表单,但仍然没有得到验证。为什么?我不能不看你修改过的代码就说为什么。我添加了修改过的代码。你看,它总是要求数据,并给我“此字段是必需的”错误,即使我填写了字段。你的视图代码是否与你在问题中发布的代码完全相同?就目前而言,它只会呈现一个新的表单,而不会呈现一个有错误的表单。在我看来,我把request.Post改为
    form=form(request.Post或None,request.Files或None
    。这到底是怎么回事?它仍然不起作用!我使用了
    {form.as_table}
    现在它正确地显示了表单,但它仍然没有被验证。为什么?我不能说为什么不看你的修订代码。我添加了我的修订代码。你看,它总是要求数据,并给我“这个字段是必需的”即使我填写了字段,也会出现错误。您的视图代码是否与您在问题中发布的代码完全相同?目前的情况是,它只会呈现一个新表单,而不会呈现一个有错误的表单。是的。在我看来,我更改了我的请求。发布到
    form=form(request.Post或None,request.Files或None
    。这到底是怎么回事?
    <form enctype="multipart/form-data" method="post" action="/foo/">