gpt4 book ai didi

python - 如何使用 AbstractBaseUser 或 AbstractUser 创建用户。 (登录错误)

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:45 25 4
gpt4 key购买 nike

我正在尝试在 models.py 中使用我的 Person 类作为用户。不过我尝试使用 AbstractUser 和 AbstractBaseUser。在我尝试登录的部分,它们都给了我错误,我尝试了多种方法,直到我意识到我需要比我更有经验和知识的人的帮助。

我的模型.py:

from django.contrib.auth.models import AbstractUser
from django.db import models

class Pessoa(AbstractUser):
id_pessoa = models.AutoField(primary_key=True)
cnpj = models.CharField(max_length=14, unique=True)
nome = models.CharField(max_length=70)
email = models.CharField(max_length=100, blank=True, null=True)
senha = models.CharField(max_length=40, null=False)
ativo = models.BooleanField(blank=True, null=True)
datacadastro = models.DateField(blank=True, null=True)
cidade = models.CharField(max_length=50, blank=True, null=True)
uf = models.CharField(max_length=2, blank=True, null=True)
USERNAME_FIELD = 'cnpj'

class Meta:
managed = False
db_table = 'pessoa'

详细信息:我无法在正在使用的任何模板中删除或添加字段,因为我已使用 inespectdb 基于我正在使用的数据库创建模型(相同的数据库)已经充满了数据)。任何改变,除了基本的改变,都是在深思熟虑之外的。

在我的 views.py 下面,使用 def 验证登录并重定向到仪表板

def dash_login(request):
form = LoginForm(request.POST, None)
if request.method == 'POST':
#if form.is_valid():
username = form.data['cnpj']
password = form.data['senha']
user = authenticate(username=username)
print(username)
#p = Pessoa.objects.filter(cnpj=form.data['cnpj']).values('id_pessoa')[0]['id_pessoa']
#login(request, user)
print(request.user.is_authenticated)
#return render(request, 'dashboard.html')
return render(request, 'login.html', {'form': form})

我使用 print() 在命令到达之前测试命令:

user = authenticate(username=username)

它会触发此错误:

File"C:\Users\Pichau\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\utils.py", line 85, in _execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: column pessoa.password does not exist LINE 1: SELECT "pessoa"."password", "pessoa"."last_login", "pessoa"....

** Regardless I put password inside the authenticate error is shot. **

这是第二个选项:

如果我删除 p 并使用 return render (request, 'dashboard.html') 我会在没有用户的情况下进行重定向,那么我会遇到同样的错误id,这导致我在仪表板内获取其数据时出现问题。

但是我仍然遇到主要问题,该表正在登录 Django 登录名,而不是我在 models.py | 中创建的登录名。表单.py

无论如何,感谢这篇文章中对我的帮助,我将感谢任何给我任何指导的人。

最佳答案

无法像使用 USERNAME_FIELD 那样设置密码字段选项。然而,需要记住的一件事是 Django 模型字段的名称不必与基础数据库表中的名称相匹配;您可以使用 db_column字段定义选项:

password = models.CharField(max_length=40, null=False, db_column='senha')

另一个问题是你当然应该使用 AbstractBaseUser,而不是 AbstractUser;后者添加了大量您不想要或不具备的字段。

关于python - 如何使用 AbstractBaseUser 或 AbstractUser 创建用户。 (登录错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54555130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com