Django网站建设-GMOOC-数据库设计/model设计

来源:互联网 发布:mac world破解版 编辑:程序博客网 时间:2024/06/05 21:13

配置虚拟环境:

1.安装虚拟环境:
1.1.下载virtualenv
1.2.安装:pip install virtualenv
1.3.创建virtualenv(cmd中): cd 进入virtualenv安装地址,执行命令virtualenv 目标地址
1.4.cd 进入目标虚拟环境地址中(Script目录中),启动虚拟环境命令:activate

下载Django1.9版本

pip install django==1.9

在pycharm中新建Django文件

这里写图片描述

这里写图片描述

配置数据库连接

DATABASES = {'default': {    'ENGINE': 'django.db.backends.mysql',    'HOST': '127.0.0.1',    'USER': 'root',    'PASSWORD': '********',    'NAME': 'GMOOC',}

}

生成Django默认数据表

Run manage.py Task —> makemigrations —> migrate

这里写图片描述


数据表结构

这里写图片描述

这里写图片描述

users model:记录用户信息
coueses model:记录课程信息
organization model:记录机构信息,教师信息
operation mode:记录用户操作,记录用户与课程、机构的联系


新建users app(首先定义好用户表)

Run manage.py Task —> startapp users

建立users models

class UserProfile(AbstractUser):#继承AbstractUser等于继承auth_user数据表的类    nick_name = models.CharField(max_length=50,verbose_name=u"外号",default='')    birthday = models.DateField(verbose_name=u'生日日期',default='',null=True,blank=True)    gender = models.CharField(max_length=5,choices=(('male',u'男'),('female','女')),default=u'女')    adress = models.CharField(max_length=100,default=u'')    mobile = models.CharFild(max_length=11,null=True,blank=True)    img = models.ImageField(upload_to='image/%Y%m',default='image/default.png')class Meta:    verbose_name = u'用户信息'    verbose_name_plural = verbose_name

Django之模型(model)中的choices字段的使用

Django模型中的字段有个choices属性,这个属性可以提供被选数据。如果一个字段设置了这个属性,在模版中如果我要显示这个字段,那么django模版系统就会将它默认解析为一个下来菜单,这样对于一个静态的下拉菜单式很方便的,下来我们看下django官方文档中对这个属性使用的介绍。


在setting中注册user,重载AUTH_USER_MODEL

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'users',

]

AUTH_USER_MODEL = ‘users.UserProfile’ #’AppName.ClassName’

migrate app table

Run manage.py Task —> makemigrations users —>migrate users

在models中建立邮箱验证数据表

class EmailVerifyCode(models.Model):    code = models.CharField(max_length=20,verbose_name='验证码')    email = models.EmailField(max_length=30,verbose_name='邮箱')    send_time = models.DateTimeField(default=datetime.now,verbose_name=u'发送时间')  #注意是now而不是now()    send_type = models.CharField(choices=(('reguster',u'注册'),('forget',u'忘记密码')))    class Meta:        verbose_name = u'邮箱验证码'        verbose_name_plural = verbose_name

Run manage.py Task —> makemigrations users —>migrate users

在models中建立轮播图数据表

class Banner(models.Model):url = models.URLField(max_length=200,verbose_name=u'访问地址')img = models.ImageField(upload_to='Banner/%Y/%m',default='Banner/default.png',verbose_name=u'轮播图')index = models.IntegerField(default=100,verbose_name=u'序号')title = models.CharField(max_length=100,verbose_name=u'标题')add_time = models.DateTimeField(default=datetime.now,verbose_name=u'图片录入时间')class Meta:    verbose_name = u'轮播图'    verbose_name_plural = verbose_name

Run manage.py Task —> makemigrations users —>migrate users

建立courses app

Run manage.py Task —> makemigrations courses —>migrate courses
完成后建立数据表
这里写图片描述

建立Courses数据表

class Course(models.Model):    CourseName = models.CharField(max_length=100,verbose_name=u'课程名称')    Describe = models.CharField(verbose_name=u'课程简介',max_length=500)    Detail = models.TextField(verbose_name=u'课程详情')    degree = models.CharField(max_length=10,verbose_name=u'课程难度',choices=(('cj',u'初级'),('zj',u'中级'),('gj',u'高级')))    LearnTime = models.IntegerField(max_length=5,verbose_name=u'学习时长',default=0)    Lesson = models.IntegerField(max_length=5,verbose_name=u'章节数',default=0)    CourseType = models.CharField(max_length=30,verbose_name=u'课程类型')    #LearnUser = models.ImageField(upload_to='courses/%Y/%m',max_length=500,verbose_name=u'学习用户')    CoursePicture = models.ImageField(upload_to='courses/%Y/%m',max_length=500,verbose_name=u'课程封面')    Students = models.IntegerField(default=0,verbose_name=u'学习人数')    FavouriteNumber = models.IntegerField(default=0,verbose_name=u'喜欢人数')    ClikeNumber = models.IntegerField(default=0,verbose_name=u'点击人数')    AddTime = models.DateTimeField(default=datetime.now,verbose_name=u'添加时间',)    class Meta:        verbose_name = u'课程信息'        verbose_name_plural = verbose_name

建立Lesson数据表

class Lesson(models.Model):Course = models.ForeignKey(Course,verbose_name=u'课程名称')LessonName = models.CharField(max_length=100,verbose_name=u'章节名称')AddTime = models.DateTimeField(default=datetime.now,verbose_name=u'添加时间')class Meta:    verbose_name = u'章节'    verbose_name_plural = verbose_name

建立Video数据表

class Video(models.Model):Lesson = models.ForeignKey(Course, verbose_name=u'章节名称')VideoName = models.CharField(max_length=100, verbose_name=u'视频名称')AddTime = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')class Meta:    verbose_name = u'视频'    verbose_name_plural = verbose_name

建立CourseResource数据表

class CourseResource(models.Model):Course = models.ForeignKey(Course, verbose_name=u'课程名称')Name = models.CharField(max_length=100, verbose_name=u'课程名称')DownLoad = models.CharField(max_length=100, verbose_name=u'视频名称')AddTime = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')class Meta:    verbose_name = u'课程资源'    verbose_name_plural = verbose_name

拓展 - django之对FileField字段的upload_to的设定

2.使用strftime()
如果觉得以上方式太僵硬,万一文件重名了,那就会有各种问题了,为了避免重名,django在>upload_to上内置了strftime()函数
class User(models.Model):
avatar = ImageField(upload_to = ‘avatar/%Y/%m/%d/’)
这样子的方式,%Y、%m、%d分别表示年、月、日

原文连接-django之对FileField字段的upload_to的设定


建立organization app

(好像课程和教师没有对应上)

class CityDict(models.Model):    CityName = models.CharField(max_length=20,verbose_name=u'城市名称')    CityDescribe = models.TextField(verbose_name=u'城市描述')    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'城市'        verbose_name_plural =verbose_nameclass CourseOrganization(models.Model):    Organization = models.CharField(max_length=50,verbose_name=u'组织名称')    OrganizationDescribe = models.TextField(verbose_name=u'组织描述')    ClickNumber = models.IntegerField(verbose_name=u'点击数',default=0)    FavoriteNumber = models.IntegerField(verbose_name=u'收藏数',default=0)    OrganizationImage = models.ImageField(upload_to='org/%Y/%m',verbose_name=u'组织封面')    Address = models.CharField(max_length=200,verbose_name=u'组织地址')    City = models.ForeignKey(CityDict,verbose_name=u'所属城市')    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'课程机构'        verbose_name_plural =verbose_nameclass Teacher(models.Model):    BelongOrganization = models.ForeignKey(CourseOrganization,verbose_name=u'所属机构')    TeacherName = models.CharField(max_length=50,verbose_name=u'教师名称')    WorkLife = models.IntegerField(verbose_name=u'工作年限',default=0)    WorkCompany = models.CharField(max_length=50,verbose_name=u'就职公司')    WorkPosition = models.CharField(max_length=50,verbose_name=u'职位')    Point = models.CharField(max_length=50,verbose_name=u'教学特点')    ClickNumber = models.IntegerField(verbose_name=u'点击数', default=0)    FavoriteNumber = models.IntegerField(verbose_name=u'收藏数', default=0)    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'教师'        verbose_name_plural =verbose_name

建立operation app

class UserAsk(models.Model):    UserName = models.CharField(max_length=20,verbose_name=u'用户名称')    MobileNumber = models.CharField(max_length=11,verbose_name=u'用户电话')    CourseName = models.CharField(max_length=50,verbose_name=u'课程名称')    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'用户咨询'        verbose_name_plural =verbose_nameclass CourseComment(models.Model):    User = models.ForeignKey(UserProfile,verbose_name=u'用户')    Course = models.ForeignKey(Course,verbose_name=u'课程')    Comment = models.CharField(max_length=200,verbose_name=u'用户评论')    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'课程评论'        verbose_name_plural =verbose_nameclass UserFavorite(models.Model):    User = models.ForeignKey(UserProfile,verbose_name=u'用户')    #为了少增加数据条目,所以用  FavoriteID 和 FavoriteType 来控制收藏类型和收藏的ID    FavoriteID = models.IntegerField(default=0,verbose_name=u'数据ID')    FavoriteType = models.IntegerField(choices=((1,'课程'),(2,'机构'),(3,'教师')))    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'用户收藏'        verbose_name_plural =verbose_nameclass UserMessage(models.Model):    # user使用IntegerField,"0"指代给所有人发送信息,可以用数字分别设定给哪一群人发送信息,为用户ID时,指代给某位用户发送信息    User = models.IntegerField(default=0,verbose_name=u'用户')    message = models.CharField(max_length=500,verbose_name=u'信息')    HasRead = models.BooleanField(default=False,verbose_name=u'是否已读')    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'用户消息'        verbose_name_plural =verbose_nameclass UserCourse(models.Model):    User = models.ForeignKey(UserProfile,verbose_name=u'用户')    Course = models.ForeignKey(Course,verbose_name=u'课程')    AddTime = models.DateTimeField(default=datetime.now)    class Meta:        verbose_name = u'用户课程'        verbose_name_plural =verbose_name

在setting中注册APP

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'users',    'courses',    'organization',    'operation',]

生成数据库

Run manage.py Task ---> makemigrations ---> migrate

迁移所有app至统一的文件夹(apps)

1.在根目录下新建python package

2.将app都移至apps文件夹下(两个都不勾选)
这里写图片描述

3.mark directoru as source root
这里写图片描述

4.在setting中加入python的搜索目录之下(命令行运行时才能找到model的路径

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
原创粉丝点击