拓展User模型

    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'

猜你喜欢

转载自blog.csdn.net/yx1179109710/article/details/81326204