Django 是一个高级 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 自带一个默认的用户模型 AbstractUser
和 AbstractBaseUser
,但有时你可能需要自定义用户模型以满足特定需求,比如添加额外的字段或修改用户认证方式。
Django 提供了两种主要的自定义用户模型方式:
AbstractUser
:这种方式允许你继承 Django 默认的用户模型并添加或修改字段。AbstractBaseUser
:这种方式提供了更多的灵活性,但需要你实现一些额外的方法,如 save()
和 delete()
。当你需要以下情况时,可以考虑自定义用户模型:
生日
、性别
等。假设你已经创建了一个自定义用户模型 CustomUser
,继承自 AbstractUser
:
# models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
birth_date = models.DateField(null=True, blank=True)
gender = models.CharField(max_length=10, choices=[('M', 'Male'), ('F', 'Female')], null=True, blank=True)
在 settings.py
中配置自定义用户模型:
# settings.py
AUTH_USER_MODEL = 'yourapp.CustomUser'
ImportError
原因:可能是由于 Django 尚未完成对自定义用户模型的检测,或者路径配置不正确。
解决方法:
settings.py
中正确配置了 AUTH_USER_MODEL
。python manage.py makemigrations
和 python manage.py migrate
,以确保数据库迁移正确应用。原因:可能是由于未在 admin.py
中注册自定义用户模型。
解决方法:
# admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
model = CustomUser
list_display = ['email', 'username', 'birth_date', 'gender', 'is_staff']
admin.site.register(CustomUser, CustomUserAdmin)
# models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
birth_date = models.DateField(null=True, blank=True)
gender = models.CharField(max_length=10, choices=[('M', 'Male'), ('F', 'Female')], null=True, blank=True)
# settings.py
AUTH_USER_MODEL = 'yourapp.CustomUser'
# admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
model = CustomUser
list_display = ['email', 'username', 'birth_date', 'gender', 'is_staff']
admin.site.register(CustomUser, CustomUser雅虎)
通过以上步骤,你应该能够成功导入并使用自定义用户模型。如果遇到其他问题,请参考 Django 官方文档或相关社区资源。
云+社区沙龙online第6期[开源之道]
企业创新在线学堂
企业创新在线学堂
北极星训练营
企业创新在线学堂
Techo Day
微搭低代码直播互动专栏
算法大赛
微搭低代码直播互动专栏
云+社区技术沙龙[第10期]
领取专属 10元无门槛券
手把手带您无忧上云