(Django)为什么我的登录只能用于db表:auth_user不能用于另一个表:myapp_user?

qoefvg9y  于 2022-12-01  发布在  Go
关注(0)|答案(1)|浏览(127)

对不起,英语不好!
我在我的项目中有一个登录函数,如下所示:

from django.contrib.auth.forms import AuthenticationForm
from django.contrib import auth
from django.http import HttpResponseRedirect
from django.shortcuts import render 

def log_in(request):
    form = AuthenticationForm(request.POST)
    if request.method == "POST":
        form = AuthenticationForm(data=request.POST)
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = auth.authenticate(request,username=username,password=password)
        if user is not None and user.is_active:
            auth.login(request,user)
            return HttpResponseRedirect('/index')
    context = {
    'form': form,
    }   
    return render(request, 'login.html', context)

此函数可以用于保存在数据库表auth_user中的任何帐户,但不能用于我定义的类User:

from django.contrib.auth.models import (
     BaseUserManager, AbstractBaseUser  )

class User(AbstractBaseUser):
        username = models.CharField(unique=True,max_length=20,default="")
        email = models.EmailField()
        date_of_birth = models.DateField()
        date_joined = models.DateTimeField(auto_now_add=True)
        last_login = models.DateTimeField(auto_now=True)
        is_admin = models.BooleanField(default=False)
        is_active = models.BooleanField(default=True)
        objects = AccountManager()
        USERNAME_FIELD = 'username' #類似主鍵的功用
        REQUIRED_FIELDS = ['email','username'] #必填
    
        def __str__(self):
            return self.email
    
        def is_staff(self):
            return self.is_admin
    
        def has_perm(self, perm, obj=None):
            return self.is_admin
            
        def has_module_perms(self, app_label):
            return self.is_admin

如果我使用注册页面创建一个新的帐户数据,它将保存在表:function_user(“函数”是我的应用程序名称),如果我登录表:auth_user帐户,它将跳转到/index,这是正确的,但当我登录新的注册帐户,它没有做任何事情,我真的很确定用户名和密码已经在表:function_user中创建。
register(看起来工作正常,数据将保存在function_user中):

def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/index')
    else:
        form = RegisterForm()
        
    context = {'form': form}
    return render(request, 'register.html', context)

数据库x1c 0d1x
我希望新创建的用户帐户(即function_user)除了auth_user之外还能够登录。
感谢阅读。

j9per5c4

j9per5c41#

您是否在www.example.com文件中添加了自定义用户模型settings.py
在www.example.com中添加以下行settings.py
使用自定义用户模型所在的应用程序名称替换用户

AUTH_USER_MODEL = 'users.User'

相关问题