Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息。
对于 Django 内置的 User 模型, 仅包含以下一些主要的属性:
username,即用户名
password,密码
email,邮箱
first_name,名
last_name,姓
对于一些网站来说,用户可能还包含有昵称、头像、个性签名等等其它属性。因此仅仅使用 Django 内置的 User 模型是不够。好在 Django 用户系统遵循可拓展的设计原则。我们可以方便地拓展 User 模型。创建步骤如下:
1、创建一个用户的应用:
python manage.py startapp users
2、为了让 Django 用户认证系统使用我们自定义的用户模型,必须要在settings.py里通过 AUTH_USER_MODEL 指定自定义用户模型所在的位置,即需要在settings.py中进行如下设置:
AUTH_USER_MODEL = 'users.User'
3、事实上,查看 User 模型的源码就知道,User 也是继承自 AbstractUser 抽象基类。而且仅仅就是继承了 AbstractUser,没有对 AbstractUser 做任何的拓展。所以,如果我们继承 AbstractUser,将获得 User 的全部特性,而且还可以根据自己的需求进行拓展。打开 users/models.py 文件,写上我们自定义的用户模型代码:user/models.py中:
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.class User(AbstractUser): # 昵称 nickname = models.CharField(max_length=50, verbose_name='昵称') # 头像 avatar = models.ImageField(upload_to='avatar/%Y/%m/%d', default='default.jpg', verbose_name='头像') # 签名 signature = models.CharField(max_length=200, verbose_name='签名', default='This guy is too lazy to leave anything here!') class Meta(AbstractUser.Meta): pass
4、将blog/models.py中的author中的外键关系改为‘users.User’,注意将User引入(from users.models import User)
5、执行迁移:
执行python manage.py makemigrations时会报错,需要pip install pillow
再执行python manage.py migrate,此时出现django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency users.0001_initial on database 'default'.错误,则需要删除数据库所有表,再执行迁移。
要先在settings.py中:
# User AUTH_USER_MODEL = 'users.User'