Django登录错误的密码显示正确的密码

时间:2018-03-05 17:11:36

标签: python django forms login

我正在制作登录表单并使用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)

正如评论中所述

这是我的主页/ admin.py

from django.contrib import admin
from .models import User
admin.site.register(User)

这些是我不同用户的图片

superuser vaibhav2(使用命令python manage.py创建超级用户创建)Has encrypted password它的登录也获得成功

用户asd手动创建(No encrypted password see image)

https://imgur.com/EOewk41

2 个答案:

答案 0 :(得分:1)

您需要创建一个自定义的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)

答案 1 :(得分:1)

丹尼尔罗斯曼是对的。您需要将定义的模型指向UserAdmin以启用加密。将以下代码段添加到df['timestamp'] = pd.to_datetime(df['timestamp'], format='%d-%m-%y %H:%M') df=df.sort_values(['user', 'timestamp']) session = 1000 def counter(clause): global session if not clause: session += 1 return session df[['u', 't']] = df[['user', 'timestamp']].shift(-1).ffill() df['session_id'] = df.apply(lambda x: counter(all([[x['user']==x['u']], (x['timestamp']-x['t']) >= -pd.Timedelta(minutes=20)])), axis=1) 文件

admin.py