自定义user模型

想要创建自己的用户模型, 并希望Django的认证系统使用它, 需要按照以下步骤操作:
* 1. 创建自定义用户模型: 在应用的models.py文件中, 可以继承:
     1.1 AbstractUser(如果你需要Django默认提供的所有字段).
     1.2 AbstractBaseUser(如果你只需要自定义字段).
     1.3 PermissionsMixin(如果你需要权限系统).
from django.contrib.auth.models import AbstractUser  
 
class MyUser(AbstractUser):  
    # 添加自定义字段  
    some_field = models.CharField(max_length=100)  
 
    # 其他自定义内容...
* 2. 设置AUTH_USER_MODEL:
在项目settings.py文件中, 找到INSTALLED_APPS设置并确保your_app'(应用名称)已经被添加进去.
然后, 添加或修改AUTH_USER_MODEL设置, 使其指向你的自定义用户模型.

例如, 如果你的应用名称是myapp并且自定义用户模型是MyUser, 则应该这样设置:
INSTALLED_APPS = [  
    # ...  
    'myapp',  
    # ...  
    'django.contrib.auth',  
    # ...  
]  
 
AUTH_USER_MODEL = 'myapp.MyUser'
在Django中, AUTH_USER_MODEL是一个在项目的settings.py文件中设置的重要变量, 
它用于指定你想要用作Django认证系统(通常是用户模型)的自定义模型.
如果你打算使用Django提供的默认User模型, 那么不需要设置这个变量, 因为它已经有了默认值.

请注意, AUTH_USER_MODEL, 这个值不是一个完整的Python路径, 仅包括应用名称和模型名称, 两者之间用点号分隔.
详细说明: 在Django中, 当引用一个模型时, 通常不需要包含 models 部分, 
因为Django有一个约定, 即模型类总是定义在应用的models.py文件中.
这个约定允许Django框架在内部简化模型的引用方式.

当设置AUTH_USER_MODEL为 'myapp.MyUser' , Django 将会做以下几件事:
1. 查找INSTALLED_APPS列表中名为myapp的应用.
2. 在该应用的models.py文件中查找名为MyUser的类.
3. 使用这个MyUser类作为默认的用户模型.
  
这里不需要models是因为Django已经知道要去哪里找模型了——它就在应用的models.py文件中.
如果包含了models(比如'myapp.models.MyUser'), Django会尝试从一个名为models的模块(而不是文件)中导入MyUser,
这会导致导入错误:
app_label, model_name = model.split(".")  # 将配置按.切分
ValueError: too many values to unpack (expected 2)  # 值错误: 要解压缩的值太多(预期为 2)
...
ValueError: Invalid model reference 'user.models.MyUser'. 
String model references must be of the form 'app_label.ModelName'.
值错误:无效的模型引用 'user.models.MyUser'.
字符串模型引用必须是 'app_label.ModelName' 的形式.

所以, 'myapp.MyUser'是Django的一个约定俗成的写法, 用于引用在myapp应用的models.py文件中定义的MyUser模型.
这个约定简化了模型引用的语法, 并使Django框架更加易用.
* 3. 迁移数据库: 在修改了AUTH_USER_MODEL之后, 需要运行Django的迁移命令来更新你的数据库模式.
# 在你的命令行中运行:
python manage.py makemigrations  
python manage.py migrate
这将会为自定义用户模型创建必要的数据库表(如果它们还不存在的话).
* 4. 更新你的代码: 在代码中, 当需要引用用户模型时, 不要直接使用 django.contrib.auth.models.User,
     而应该使用get_user_model()函数, 这个函数会返回在settings.py中设置的AUTH_USER_MODEL所指向的模型.
from django.contrib.auth import get_user_model  
 
User = get_user_model()  
user = User.objects.get(username='some_username')
确保遵循这些步骤, 这样Django的认证系统就会使用自定义用户模型了.
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值