gpt4 book ai didi

python - Django form.is_valid() 始终为假

转载 作者:太空狗 更新时间:2023-10-29 17:14:41 24 4
gpt4 key购买 nike

我正在编写登录代码。当我手动编写表格时,我让它工作了。

下面的代码有效:

View .py

def login_view(request):
if request.method == 'GET':
return render(request, 'app/login.htm')
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is None:
return HttpResponseRedirect(reverse('error'))
if not user.is_active:
return HttpResponseRedirect(reverse('error'))

# Correct password, and the user is marked "active"
auth.login(request, user)
# Redirect to a success page.
return HttpResponseRedirect(reverse('home'))

模板:

<form method="post" action="{% url 'login'  %}">
{% csrf_token %}
<p><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="30" /></p>
<p><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></p>

<input type="submit" value="Log in" />
<input type="hidden" name="next" value="" />
</form>

太棒了!但现在我想使用 Django 的表单做同样的事情。

下面的代码不起作用,因为我总是得到 is_valid() == False。

views.py:

def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(request.POST)
print form.is_valid(), form.errors, type(form.errors)
if form.is_valid():
## some code....
return HttpResponseRedirect(reverse('home'))
else:
return HttpResponseRedirect(reverse('error'))
else:
form = AuthenticationForm()
return render(request, 'app/login.htm', {'form':form})

模板:

<form action="{% url 'login' %}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />

stackoverflow 上有很多人提示他们得到的 is_valid 总是错误的。我已经阅读了所有这些帖子,据我所知我没有犯任何这些错误。我发现了一个新的错误:-)

编辑:我在代码中添加了打印。打开登录 View 并提交时的输出是

[27/Dec/2013 14:01:35] "GET /app/login/ HTTP/1.1" 200 910
False <class 'django.forms.util.ErrorDict'>
[27/Dec/2013 14:01:38] "POST /app/login/ HTTP/1.1" 200 910

因此 is_valid() 为 False,但 form.errors 为空。

最佳答案

事实证明 Maxime 毕竟是对的(抱歉)——您确实需要 data 参数:

form = AuthenticationForm(data=request.POST)

不过,这样做的原因是 AuthenticationForm 覆盖了 __init__ 的签名以期望请求 作为第一个位置参数。如果您明确提供 data 作为 kwarg,它将起作用。

(不过,您仍然应该省略在出错时重定向的 else 子句:在这种情况下,最好让表单重新呈现错误。)

关于python - Django form.is_valid() 始终为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com