Django 1.9 form.is_valid() returns 错误
Django 1.9 form.is_valid() returns false
我正在尝试从 Django 自己的用户模型中验证用户名和密码。 POST 请求有效,forms.py 有什么问题吗?
views.py
from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
from .forms import LoginForm
from django.contrib.auth import authenticate, login as auth_login
def login(request):
msg = "Login"
if (request.method == "POST"):
form = LoginForm(request.POST or None)
msg = "post"
if form.is_valid():
msg = "valid"
context = {
"msg":msg,
}
return render(request, "login.html", context)
forms.py
from django import forms
from django.contrib.auth.models import User
class LoginForm(forms.ModelForm):
class Meta:
model = User
fields = [
"username",
"password"
]
Login.html
<div class="container">
{% if user.is_authenticated %}
blablabla
{% else %}
<div class="row">
<div class="col-md-6" style="background-color: lightblue">
<h1 style="color:red">{{ msg }}</h1>
<form method="POST" action="">{% csrf_token %}
acronym<input type="acronym" name="acronym">
password<input type="password" name="password">
<input type="submit" value="Login">
</form>
</div>
{% endif %}
编辑添加了 login.html 文件
表单不在您的上下文中,也没有为获取请求实例化。
首先尝试这样的事情;
def login(request):
msg = "Login"
form = LoginForm()
if (request.method == "POST"):
form = LoginForm(request.POST or None)
msg = "post"
if form.is_valid():
msg = "valid"
context = {
"form": form,
"msg":msg,
}
return render(request, "login.html", context)
这样你就可以在你的模板中检查 {{ form.errors }}
看看有什么问题。
目前如何在 login.html
中呈现表单?您是否在这样的表单中使用循环字段;
<form class="form" action="" method="POST">
{% if form.non_field_errors or form.errors %}
<div class="error-list-block">
<p>
Please correct the errors below - Ensure all required fields
are completed.
</p>
<ul>
{% for error in form.non_field_errors|add:form.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% csrf_token %}
{% for field in form %}
{% if field.is_hidden %}
{{ field }}
{% else %}
我正在尝试从 Django 自己的用户模型中验证用户名和密码。 POST 请求有效,forms.py 有什么问题吗?
views.py
from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
from .forms import LoginForm
from django.contrib.auth import authenticate, login as auth_login
def login(request):
msg = "Login"
if (request.method == "POST"):
form = LoginForm(request.POST or None)
msg = "post"
if form.is_valid():
msg = "valid"
context = {
"msg":msg,
}
return render(request, "login.html", context)
forms.py
from django import forms
from django.contrib.auth.models import User
class LoginForm(forms.ModelForm):
class Meta:
model = User
fields = [
"username",
"password"
]
Login.html
<div class="container">
{% if user.is_authenticated %}
blablabla
{% else %}
<div class="row">
<div class="col-md-6" style="background-color: lightblue">
<h1 style="color:red">{{ msg }}</h1>
<form method="POST" action="">{% csrf_token %}
acronym<input type="acronym" name="acronym">
password<input type="password" name="password">
<input type="submit" value="Login">
</form>
</div>
{% endif %}
编辑添加了 login.html 文件
表单不在您的上下文中,也没有为获取请求实例化。
首先尝试这样的事情;
def login(request):
msg = "Login"
form = LoginForm()
if (request.method == "POST"):
form = LoginForm(request.POST or None)
msg = "post"
if form.is_valid():
msg = "valid"
context = {
"form": form,
"msg":msg,
}
return render(request, "login.html", context)
这样你就可以在你的模板中检查 {{ form.errors }}
看看有什么问题。
目前如何在 login.html
中呈现表单?您是否在这样的表单中使用循环字段;
<form class="form" action="" method="POST">
{% if form.non_field_errors or form.errors %}
<div class="error-list-block">
<p>
Please correct the errors below - Ensure all required fields
are completed.
</p>
<ul>
{% for error in form.non_field_errors|add:form.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% csrf_token %}
{% for field in form %}
{% if field.is_hidden %}
{{ field }}
{% else %}