杀手级xadmin开发在线教育网站2_需求分析和表结构设计1

项目结构

  • 新建四个apps

新建四个apps

  • settings.py中添加4个apps
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.courses.apps.CoursesConfig',
    'apps.users.apps.UsersConfig',
    'apps.organizations.apps.OrganizationsConfig',
    'apps.operations.apps.OperationsConfig',
]

数据库设计

user的设计

  • django自带的user里面已经有了一些默认的字段

image.png
我们需要结合网站的实际情况进行扩充,通过重载 AbstractUser类来进行添加。
image.png

users/models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

GENDER_CHOICES = (
    ('male', '男'),
    ('female', '女')
)

# 继承了类之后还需要在settings中配置,使其认为UserProfile才是默认的用户表
# AUTH_USER_MODEL = 'users.UserProfile'
class UserProfile(AbstractUser):
    nick_name = models.CharField(max_length=50, verbose_name='昵称', default='')
    # nick_name = models.CharField(max_length=50, verbose_name='昵称', null=True, blank=True) # 上面的写法也是可以的
    birthday = models.DateField(verbose_name='生日', null=True, blank=True)  # 此处不使用 default ,因为不能将其自定义为当前时间
    gender = models.CharField(verbose_name='性别', choices=GENDER_CHOICES, max_length=6)  # max_length是因为female长度为6
    address = models.CharField(max_length=100, verbose_name='地址', default='')
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号码')
    image = models.ImageField(upload_to="head_image/%Y%m", default="default.jpg")  # upload_to是相当与media的子路径,文件夹名可以传递参数(/%Y/%m 年月),ImageField其实就是一个CharField,保存的是文件路径



    class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name

    def __str__(self):
        if self.nick_name:
            return self.nick_name
        else:
            # 只要继承了AbstractUser,那么username就是必填字段
            return self.username

还需要在settings.py中配置,使其认为UserProfile才是默认的用户表

# 已经在INSTALLED_APPS中注册好了app,所以直接以users开头即可
AUTH_USER_MODEL = 'users.UserProfile'

因为使用到了ImageField,所以还需要安装pillow

pipenv install pillow

然后使用makemigrationsmigrate来更新数据库(我在这边更新的时候出错了,所以就删除并重建了这个数据库)
新的数据库变成了这样(命名:app的名字+class的名字)
image.png
新的字段也已经更新了
image.png


袅残烟
42 声望4 粉丝