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文件
navicat中新建数据库
配置数据库连接
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'))
- Django网站建设-GMOOC-数据库设计/model设计
- Django网站建设-GMOOC-后台管理系统
- django 个人博客系统开发 - 数据库设计与django Model
- 网站建设--网页设计制作
- 网站建设的设计要点
- 网站建设-如何才能设计好一个网站
- 网站建设,网站制作,网站设计,灌云网站建设,e概念工作室,连云港网站建设
- 网站建设内页设计也重要
- 空间数据库的设计与建设
- 网站建设-网站设计怎么样做的更好?
- python Django 1.7 中文入门 (官网) 04 设计model
- django学习笔记之(model设计与实现)
- 搜索引擎二:Django网站首页设计
- django网站设计与规划【Tango with Django】
- 权威国外网页设计网站建设论坛链接
- 网站建设,网页设计,手机APP制作等
- 网站建设使用创意布局设计的优势
- 淘宝装修设计外包网站建设-纳米网络科技
- M
- 20171030每日一练
- net/http/server.go部分代码的解释
- Python 文件and集合笔记
- 学生结构体链表
- Django网站建设-GMOOC-数据库设计/model设计
- hdu6035_Colorful Tree_(树形DP)
- java 多态
- O
- 用递归的方法把一个无符号整数的每一位数字单独写出来,并且计算出每一位加起来的和。
- 性能测试的一些行话,郭芙大话性能测试
- Centos7安装YouCompleteMe(一)
- Java字节码3-使用ByteBuddy实现一个Java-Agent
- 理解Java类加载的步骤