Django 自定义用户模型和超级用户
Posted
技术标签:
【中文标题】Django 自定义用户模型和超级用户【英文标题】:Django Custom User Model and SuperUser 【发布时间】:2021-12-01 10:25:53 【问题描述】:我正在尝试创建一个 web3 用户可以使用他们的钱包登录的应用程序但我希望超级用户仍然使用用户名/密码。(我未来的计划是创建一个自定义后端执行 web3 身份验证流程)
我很接近这一点,因为我能够创建第一个可以使用用户名/密码的管理员,但意识到它在下一个 createsuperuser 上失败了:
django.db.utils.IntegrityError: UNIQUE constraint failed: users_web3user.public_address
所以我现在尝试只是添加一个随机整数来满足它,只是为了看看它是否可以工作,但同样的问题不断出现。
这是否是解决此问题并将我的用户与我的超级用户分开的正确方法?
此外,即使我在 settings.py 中设置了 user
是我的应用程序,我的调试器也永远不会被调用:
AUTH_USER_MODEL = 'users.Web3User'
模型.py: Web3UserManager 类(BaseUserManager): def create_user(self, public_address): 如果不是公共地址: raise ValueError('用户必须有一个 public_address')
user = self.model(
public_address=public_address,
nonce=secrets.token_urlsafe(32)
)
user.save(using=self._db)
return user
def create_superuser(self, username, password=None):
import ipdb; ipdb.sset_trace()
public_address=secrets.randbelow(299)
print(public_address)
user = self.create_user(
username=username,
password=password,
public_address=public_address
)
user.is_admin = True
user.save(using=self._db)
return user
class Web3User(AbstractUser):
public_address = models.CharField(max_length=64, unique=True)
nonce = models.CharField(max_length=64)
【问题讨论】:
Web3User
用户是否还有用户名、电子邮件和姓名?
@IainShelvington 不,他们不会——不是在我试图创建的这个简单的基本情况下
您的超级用户将在您的应用程序中登录/执行什么操作,他们是否会与您数据库中的任何内容相关联?最好使用单个用户模型,如果您只有几个超级用户,那么也许只需向 web3 用户添加一两个特殊情况可能会起作用
您是否意识到您的调试器从未被命中?将objects = Web3UserManager()
设置在Web3User
中,您应该能够找出其余的。
我投票结束这个问题,因为虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能帮助未来的读者。
【参考方案1】:
django_custom_user==0.7
AUTH_USER_MODEL = 'user.UserModel' -> settings.py
class UserModel(AbstractEmailUser, BaseModelFields):
pass
使用包而不是做一些很酷的逻辑。
【讨论】:
我不想在用户中实现电子邮件。我需要超级用户和普通用户的两个差异用户模型。以上是关于Django 自定义用户模型和超级用户的主要内容,如果未能解决你的问题,请参考以下文章