Django模型表单没有POST数据

时间:2017-06-09 14:27:05

标签: python django django-forms django-users

我已经在Stack Overflow上看到了与此相似的其他问题,但却非常不同,所以请不要这么快就投票结束。从本质上讲,我一直在尝试按照我在网上每个教程中找到的技术制作一个非常简单的登录表单。出于某种原因,填写并提交表单不会返回任何POST请求数据。这是我的代码:

查看

def signon(request):

    if request.method == 'POST':

        form = SignOnForm(request.POST)

        if form.is_valid():

            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            user = authenticate(username = username, password = password)

            logger.info(user)

            return HttpResponse('Username: {} Password {}'.format(username, password))

        return HttpResponse("Error {}".format(request.POST))

    if request.method == 'GET':

        form = SignOnForm()

        return render(request, 'signon.html', {'form': form})

模板

<!DOCTYPE html>
<html lang = "en">

    <head>
        <meta charset = "UTF-8">
        <title>Sign into Account</title>
    </head>

    <body>

        <form method = "POST">
            {% csrf_token %}
            {{ form }}
            <input type = "submit" value = "Sign In">
        </form>

    </body>

</html>

表格

class SignOnForm(forms.ModelForm):

    password = forms.CharField(widget = forms.PasswordInput)

    class Meta:

        model = User

        fields = ['username', 'password']

我使用Django提供的User类,并且由于某种原因提交完成的表单,没有返回POST数据,因此is_valid总是失败。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试按照这样的方式编辑视图,

def signin(request):
    if request.method == 'POST':
        form = SignOnForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('url of some page')
            return HttpResponse("Error {}".format(form.errors)
    else:
        form = SignOnForm()
    return render(request, 'signon.html', dict(form=form))

答案 1 :(得分:0)

我想我已经发现了这个问题。模型表单一旦完成就会保留数据。因此,此表单未能成功创建具有现有用户名的重复用户,这是它所面临的错误。

解决方案是什么?继承forms.Form而不是forms.ModelForm并手动列出用户名和密码字段。您不应将模型附加到表单以避免此错误。这可能是最新版本中的一个新功能,因为我从未见过它。