为什么Django form.is_valid()总是假的

时间:2018-01-31 18:11:06

标签: python django django-login

我正在写一个登录代码。 但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)我该如何解决?

1 个答案:

答案 0 :(得分:0)

我建议做几件事。首先,您需要首先定义表单对象。如果您这样做并且您要导入此表单,请在此处提交以供审核。

如果您对创建自己的用户模型感兴趣,为什么不扩展Django的用户模型。它已经具有登录,组和权限等所有功能。也许除了Django用户模型之外你还想要其他属性。您可以在扩展模型中添加此属性。

的应用程序/ models.py

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

settings.py

 AUTH_USER_MODEL = 'app.User'

现在假设您要从用户模型更新用户实例。让我们使用一个基于此用户模型的表单。

的应用程序/ forms.py

from django import forms 
from .models import User


class UpdateUserForm(forms.ModelForm):

    class Meta():
        model = User

现在让我们在您的views.py

中使用此表单

的应用程序/ 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)