杀手级xadmin开发在线教育网站2_需求分析和表结构设计1
项目结构
- 新建四个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里面已经有了一些默认的字段
我们需要结合网站的实际情况进行扩充,通过重载 AbstractUser
类来进行添加。
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
然后使用makemigrations
和migrate
来更新数据库(我在这边更新的时候出错了,所以就删除并重建了这个数据库)
新的数据库变成了这样(命名:app的名字+class的名字)
新的字段也已经更新了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。