Python Django Authenticate始终返回无和正确的凭据

Python Django Authenticate始终返回无和正确的凭据,python,django,authentication,Python,Django,Authentication,我正在为我的项目创建一个登录和注册页面,并使用Django MySQL数据库进行登录和创建用户。注册操作正确,但登录功能不适用于我 PS:is_active设置为True,但仍然不起作用 如果所有信息都正确,则不会显示任何信息。我已经给出了文件的所有必要部分和代码 我尝试了所有的方法,但似乎没有任何效果。我也尝试了StackOverflow上列出的一些解决方案,但仍然没有任何效果 from django.shortcuts import render, redirect from .models

我正在为我的项目创建一个登录和注册页面,并使用Django MySQL数据库进行登录和创建用户。注册操作正确,但登录功能不适用于我

PS:is_active设置为True,但仍然不起作用

如果所有信息都正确,则不会显示任何信息。我已经给出了文件的所有必要部分和代码

我尝试了所有的方法,但似乎没有任何效果。我也尝试了StackOverflow上列出的一些解决方案,但仍然没有任何效果

from django.shortcuts import render, redirect
from .models import Description
from django.http import HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login

# Create your views here.
def index(request):
    d = Description.objects.all()
    return render(request,'index.html',{'des':d})
def signup(request):
    if request.method == 'POST':
        first_name = request.POST['first']
        last_name = request.POST['last']
        user_name = request.POST['user']
        email = request.POST['email']
        pass1 = request.POST['password1']
        pass2 = request.POST['password2']
        if pass1 == pass2:
            if User.objects.filter(email=email).exists():
                print("Email taken")
            elif User.objects.filter(username=user_name).exists():
                print("Username taken")
            else:        
                user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, password=pass1, email=email)
                user.save()
                print("User created")
        else:
            print("Password Not Matching")  
        return redirect('/')      
    else:
        return render(request,'signup.html')   
def login(request):
    if request.method == 'POST':
        email = request.POST['email']         
        password = request.POST['password']
        print(email,password)
        user = authenticate(request, email=email, password=password)
        print(user)
        if user is not None:
            login(request, user)
            print("Logged in")
        else:
            print("not logged in")    
        return redirect('/')
    else:
        return HttpResponse("Invalid")        

问题是你的注册方法。您不应向init函数提供密码。您应该使用用户的
设置密码
方法

在注册视图中,在创建用户对象的行中删除
password=pass1
。然后在保存用户之前,添加
user.set\u password(pass1)


希望这有帮助

问题在于你的注册方法。您不应向init函数提供密码。您应该使用用户的
设置密码
方法

在注册视图中,在创建用户对象的行中删除
password=pass1
。然后在保存用户之前,添加
user.set\u password(pass1)


希望这有帮助

问题是django的默认身份验证机制不允许您使用
电子邮件
进行身份验证,您只能使用
用户名
对用户进行身份验证。 无论哪种方式,您都可以使用该用户的电子邮件从
用户模型
获取该用户的用户名,然后您可以对该用户进行身份验证

    def login(request):
        if request.method == 'POST':
            email = request.POST['email']
            password = request.POST['password']
            username = ''
            try:
                username = User.objects.get(email=email).username
            except User.DoesNotExist:
                return HttpResponse("Invalid")
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                print("Logged in")
            else:
                print("not logged in")
            return redirect('/')
        else:
            return HttpResponse("Invalid")
也不要直接存储密码,始终使用django的用户标准
set\u password()

            if User.objects.filter(email=email).exists():
                print("Email taken")
            elif User.objects.filter(username=user_name).exists():
                print("Username taken")
            else:        
                user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, email=email)
                user.set_password(pass1)
                user.save()
                print("User created")

问题是django的默认身份验证机制不允许您使用
电子邮件进行身份验证,您只能使用
用户名进行身份验证。
无论哪种方式,您都可以使用该用户的电子邮件从
用户模型
获取该用户的用户名,然后您可以对该用户进行身份验证

    def login(request):
        if request.method == 'POST':
            email = request.POST['email']
            password = request.POST['password']
            username = ''
            try:
                username = User.objects.get(email=email).username
            except User.DoesNotExist:
                return HttpResponse("Invalid")
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                print("Logged in")
            else:
                print("not logged in")
            return redirect('/')
        else:
            return HttpResponse("Invalid")
也不要直接存储密码,始终使用django的用户标准
set\u password()

            if User.objects.filter(email=email).exists():
                print("Email taken")
            elif User.objects.filter(username=user_name).exists():
                print("Username taken")
            else:        
                user = User.objects.create_user(username = user_name, first_name=first_name,last_name=last_name, email=email)
                user.set_password(pass1)
                user.save()
                print("User created")

Django
authenticate
方法只允许使用用户名进行身份验证。 您可以使用用户的电子邮件从用户模型中获取用户的用户名

username = User.objects.get(email=email).username
password = request.POST.get('password')
替换此
user=authenticate(请求,电子邮件=email,密码=password)


使用此
user=authenticate(请求,用户名=username,密码=password)
Django
authenticate
方法只允许使用用户名进行身份验证。 您可以使用用户的电子邮件从用户模型中获取用户的用户名

username = User.objects.get(email=email).username
password = request.POST.get('password')
替换此
user=authenticate(请求,电子邮件=email,密码=password)


使用此
user=authenticate(request,username=username,password=password)

login()接受1个位置参数,但给出了2个位置参数。我这次收到此错误消息您的登录函数具有相同的名称login。请将其更改为其他类似user_login的选项,然后它将正常工作如果您发现此答案有帮助,请随意进行选择,thumbs uplogin()接受1个位置参数,但2个位置参数,我这次收到此错误消息您的登录函数具有相同的名称login。请将其更改为其他内容,如user_login,然后它会很好地工作如果您发现此答案有帮助,请随意选择并竖起大拇指。您的回答与我的回答相同,您认为您的回答有什么不同?您的回答与我的回答相同,您认为您的回答有什么不同?