我正在写一个登录代码。 但form.is_valid()始终为false 我不知道为什么?
model.py
class User(models.Model):
Man = 'M'
Woman = 'W'
GENDER_CHOICES=(
(Man, 'M'),
(Woman, 'W'),
)
user_no = models.AutoField(primary_key=True)
user_email = models.EmailField(max_length=254)
user_pw = models.CharField(max_length=50)
user_gender = models.CharField(
max_length=1,
choices=GENDER_CHOICES,
default=Man,
)
user_birthday = models.DateField(blank=True)
user_jdate = models.DateTimeField(auto_now_add=True)
signin.html
<form method="post" action="{% url 'signin' %}">
{% csrf_token %}
<h3>ID : {{form.user_email}} </h3>
<h3>PASSWORD : {{form.user_pw}} </h3>
<input type="submit" class="btn_submit" value="로그인" />
views.py
def signin(request):
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
print("success")
else:
print("false")
else:
form = Form()
return render(request,'signin.html',{'form':form})
1)怎么了?
2)其他注册是真的,因为signup_bails是真的,但为什么signin总是假的?
3)我该如何解决?
答案 0 :(得分:0)
我建议做几件事。首先,您需要首先定义表单对象。如果您这样做并且您要导入此表单,请在此处提交以供审核。
如果您对创建自己的用户模型感兴趣,为什么不扩展Django的用户模型。它已经具有登录,组和权限等所有功能。也许除了Django用户模型之外你还想要其他属性。您可以在扩展模型中添加此属性。
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, UserManager, AbstractUser
class User(AbstractUser):
def __init__(self, *args, **kwargs):
super(User, self).__init__(*args, **kwargs)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
def get_short_name(self):
return self.username
def __str__(self):
if self.first_name and self.last_name:
name = self.first_name + " " + self.last_name
else:
name = self.username
return name
def __unicode__(self):
return self.email
在这个例子中,您可以看到我已经从django.contrib.auth.models将我的自定义'User'模型扩展到AbstractUser,这意味着我可以使用Django的User模型中的所有属性,但我还添加了三个字段(is_active) ,is_admin,is_staff)。
别忘了将这个新的扩展模型注册到settings.py
AUTH_USER_MODEL = 'app.User'
现在假设您要从用户模型更新用户实例。让我们使用一个基于此用户模型的表单。
from django import forms
from .models import User
class UpdateUserForm(forms.ModelForm):
class Meta():
model = User
现在让我们在您的views.py
中使用此表单from .models import User
from .forms import UpdateUserForm
from django.shortcuts import get_object_or_404
def update_user(request, id):
_user = get_object_or_404(User, id=id)
form = UpdateUserForm(instance=_user)
template = 'app/template.html'
if request.method == 'POST':
form = UpdateUserForm(request.POST, instance=_user)
if form.is_valid():
form.save()
context = {
'form':form
}
return render(request, template, context)