我正在制作一个登录表单并使用Django 1.8 Python 3.5
但是我得到有效的用户名和密码的密码不正确,我该怎么办?
我制作了一个简单的登录表单,但无法找出错误,请帮助
这是我的login/forms.py
from django import forms
from mainpage.models import User
from django.contrib.auth import (
authenticate,
login,
logout,
get_user_model,
)
class UserLoginForm(forms.Form):
username=forms.CharField(max_length=40)
password=forms.CharField(max_length=40,widget=forms.PasswordInput)
def clean(self,*args,**kwargs):
username=self.cleaned_data.get("username")
password=self.cleaned_data.get("password")
user_qs = User.objects.filter(username=username)
if user_qs.count() == 0:
raise forms.ValidationError("The user does not exist")
else:
if username and password:
user = authenticate(username=username, password=password)
if not user:
raise forms.ValidationError("Incorrect password")
if not user.is_active:
raise forms.ValidationError("This user is no longer active")
return super(UserLoginForm,self).clean(*args,**kwargs)
这是我的login/views.py
from django.shortcuts import render,redirect
from .forms import UserLoginForm
from django.contrib.auth import login as auth_loginwa
from django.contrib.auth import (
authenticate,
logout,
get_user_model,
)
def login_view(request):
form1=UserLoginForm(request.POST or None)
print(request.user.is_authenticated())
if form1.is_valid():
username=form1.cleaned_data.get("username")
password=form1.cleaned_data.get("password")
user=authenticate(username=username,password=password)
auth_loginwa(request,user)
if(request.user.is_authenticated()):
return redirect("home2")
context= {
"form1": form1,
}
return render(request, "login.html",context)
这是我的mainpage/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
bio = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
正如评论中所问的
这是我的主页/管理员.py
from django.contrib import admin
from .models import User
admin.site.register(User)
这些是我的不同用户的图像
超级用户vaibhav2(使用命令python创建 manage.py 创建超级用户(具有加密密码也登录成功
用户 asd 手动创建(无加密密码见图(
https://imgur.com/EOewk41
您需要创建一个自定义的 ModelAdmin 类来对内置类进行子类化。
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
class CustomUserAdmin(UserAdmin):
model = User
admin.site.register(User, CustomUserAdmin)
Daniel Roseman是对的。您需要将定义的模型指向用户管理员以启用加密。将以下代码片段添加到您的admin.py
文件中
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)