从今天开始通过慕课网:强力Django+ 杀手级xadmin开发在线教育网站 (全新开发) 这套教程来从零开始实现搭建一个在线教育网站

第一天:

  1. 创建一个django项目(使用django2.2版本)
  2. 明确项目app
  3. 创建对应的数据库

创建django项目

https://www.cnblogs.com/hellosen/p/12402362.html

明确项目app

通过对网站需求的理解,一共创建了四个app

users:用户操作
operation:教育机构
organizations:用户的一些操作如收藏,点评等
courses:课程

创建对应的数据库

这是今天学习的重点
首先我们先明确一个结构,分层结构
在网站数据设计的时候首先要明确一个底层的数据库,其他app可以调用它,但是他不能调用他的上级,只能调用它同级的数据库,在最顶的app创建的数据库可以对整个apps进行调用。这样的好处就是使整个程序的数据库设计更加的简洁

在这个网站中 users 是最低成的apps他不能调用其他apps 而operation和course这个两个之间可以相互下调用并调用users表但是他们两个不能调用organizations 这个app 而organizations 可以调用下面的所有app

好了上面的注意点说好了 下面是实际操作了

首先是users app

from datetime import datetimefrom django.db import models
from django.contrib.auth.models import AbstractUser# AbstractUser 我们继承django中自带的一个用户表然后又重新写了一些需要的字段
class UserProfile(AbstractUser):nick_name = models.CharField(max_length=50,verbose_name='昵称',default="")birthday = models.DateField(verbose_name='生日',null=True,blank=True)genderChoice=((1,'男'),(2,'女'),(3,'保密'))gender = models.IntegerField(choices=genderChoice,verbose_name='性别',default=3)address = models.CharField(max_length=100,verbose_name='地址',default='')mobile = models.CharField(max_length=11,verbose_name='手机号',unique=True)image = models.ImageField(unique='head_image/%Y/%m',verbose_name='用户头像',default='head_image/default.jpg')class Meta:verbose_name='用户信息'verbose_name_plural=verbose_namedb_table = 'Users'def __str__(self):if self.nick_name:return self.nick_nameelse:return self.username'''
这个BaseModel他只有一个字段就是增加时间
后面的所有model都有一个增加时间字段这里
我们就可以先写一个让其他几个model继承他
'''
class BaseModel(models.Model):add_time = models.DateTimeField(default=datetime,verbose_name='添加时间')class Meta:abstract = True # 设置不生成表

这里我们注意一点上面的的我设置设置的user表 我们要在setting.py 中写下

AUTH_USER_MODEL = "users.UserProfile"

用来告诉django用户表是哪一个。

第二个是courses app

from datetime import datetime
from django.db import modelsfrom apps.users.models import BaseModel
from apps.operation.models import Teacher# Create your models here.
class Course(BaseModel):teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE,verbose_name='授课讲师')name = models.CharField(max_length=50, verbose_name='课程名称')desc = models.CharField(max_length=300, verbose_name='课程描述')learn_times = models.IntegerField(verbose_name='视频时长')degreeChoices = ((0, '初级'), (1, '中级'), (2, '高级'))degree = models.IntegerField(verbose_name='难度', choices=degreeChoices, default=0)category = models.CharField(default=u'后端开发', max_length=120, verbose_name='课程类别')students = models.IntegerField(default=0, verbose_name='学习人数')fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')click_nums = models.IntegerField(default=0, verbose_name='点击数')tag = models.CharField(default="", verbose_name='课程标签', max_length=10)youneed_know = models.CharField(default="", max_length=300, verbose_name='课程须知')teacher_tell = models.CharField(default="", max_length=300, verbose_name='老师告诉你')image = models.ImageField(upload_to='course/%Y/%m', verbose_name='封面图片', default='course/default.jpg')class Meta:verbose_name = '课程信息'verbose_name_plural = verbose_namedb_table = 'course'def __str__(self):return self.nameclass Lesson(BaseModel):course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='课程名称')name = models.CharField(max_length=100, verbose_name='章节名称')learn_times = models.IntegerField(default=0, verbose_name=u'学习时长(分钟)')class Meta:verbose_name = '章节信息'verbose_name_plural = verbose_namedb_table = 'Lesson'def __str__(self):return self.nameclass Video(BaseModel):lesson = models.ForeignKey(Lesson, verbose_name="章节", on_delete=models.CASCADE)name = models.CharField(max_length=100, verbose_name=u'视频名')learn_times = models.IntegerField(default=0, verbose_name=u'学习时长(分钟)')url = models.CharField(max_length=200, verbose_name='访问地址')class Meta:verbose_name = '视频'verbose_name_plural = verbose_namedb_table = 'Video'def __str__(self):return self.nameclass CourseResource(BaseModel):course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='课程')name = models.CharField(max_length=100, verbose_name=u'课程资源')file = models.FileField(upload_to='course/resourse/%Y/%m', verbose_name='下载地址', max_length=200)class Meta:verbose_name = '课程资源'verbose_name_plural = verbose_namedb_table = 'CourseResource'

第三个是organizations app

from django.db import models
from apps.users.models import BaseModel# Create your models here.
class City(BaseModel):name = models.CharField(max_length=50, verbose_name='城市')desc = models.CharField(max_length=200, verbose_name='描述')class Meta:verbose_name = '城市'verbose_name_plural = verbose_namedb_table = 'City'class CourseOrg(BaseModel):name = models.CharField(max_length=50, verbose_name='机构名称')desc = models.TextField(verbose_name='描述')tag = models.CharField(default='全国知名', max_length=10, verbose_name='机构标签')categoryChoices = ((0, '培训机构'), (1, '个人'), (2, '高校'))category = models.IntegerField(default=0, choices=categoryChoices, verbose_name='机构类型')fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')click_nums = models.IntegerField(default=0, verbose_name='点击数')image = models.ImageField(upload_to='org/%Y/%m', verbose_name=u'logo', max_length=50, default='org/default.jpg')address = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name=u'机构地址')students = models.IntegerField(default=0, verbose_name='学习人数')course_nums = models.IntegerField(default=0, verbose_name='课程数量')class Meta:verbose_name = '课程机构'verbose_name_plural = verbose_namedb_table = 'CourseOrg'class Teacher(BaseModel):org = models.ForeignKey(CourseOrg, on_delete=models.CharField, verbose_name='所属机构')name = models.CharField(max_length=50, verbose_name='教师名称')work_years = models.IntegerField(default=0, verbose_name='工作年限')work_company = models.CharField(max_length=50, verbose_name='就职公司')work_position = models.CharField(max_length=50, verbose_name='公司职位')points = models.CharField(max_length=50, verbose_name='教学特点')fav_nums = models.IntegerField(default=0, verbose_name='收藏人数')click_nums = models.IntegerField(default=0, verbose_name='点击数')age = models.IntegerField(default=18, verbose_name='年龄')image = models.ImageField(upload_to='teacher/%Y/%m', verbose_name=u'头像', max_length=50,default='teacher/default.jpg')class Meta:verbose_name = '课程机构'verbose_name_plural = verbose_namedb_table = 'Teacher'

第三个是organizations app

from django.db import models
from django.contrib.auth import get_user_model
# Create your models here.
from apps.users.models import BaseModel
from apps.courses.models import Course
User = get_user_model()
class UserAsk(BaseModel):name = models.CharField(max_length=20,verbose_name='姓名')mobile = models.CharField(max_length=11,verbose_name='手机号')course_name = models.CharField(max_length=50,verbose_name='课程名称')class Meta:verbose_name = '用户咨询'verbose_name_plural =verbose_namedb_table = 'UserAsk'
class CourseComments(BaseModel):user = models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')course =models.ForeignKey(Course,on_delete=models.CASCADE,verbose_name='课程')comments = models.CharField(200,verbose_name='评论')class Meta:verbose_name = '课程评论'verbose_name_plural =verbose_namedb_table = 'CourseComments'class UserFavorite(BaseModel):user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')fav_id = models.IntegerField(verbose_name='数据id')typeChoices = ((1,'课程'),(2,'课程机构'),(3,'讲师'))fav_type = models.IntegerField(choices=typeChoices,default=1,verbose_name='收藏类型')class Meta:verbose_name = '用户收藏'verbose_name_plural =verbose_namedb_table = 'UserFavorite'
class UserMessage(BaseModel):user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')message = models.CharField(max_length=200,verbose_name='消息内容')is_read = models.BooleanField(default=False,verbose_name='是否已读')class Meta:verbose_name = '用户消息'verbose_name_plural =verbose_namedb_table = 'UserMessage'class UserCourse(BaseModel):user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='课程')class Meta:verbose_name = '用户课程'verbose_name_plural =verbose_namedb_table = 'UserCourse'

Django-慕课网制作(一)相关推荐

  1. 慕课网_《如何使用高德云图在线制作属于你的地图》学习总结

    时间:2017年08月13日星期日 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/ ...

  2. 基于 Python Django 的在线编程学习平台(仿慕课网)

    仿照慕课网搭建的在线编程学习平台 源码下载地址 环境 Python 3.5 Django 1.10.5 xadmin 0.6 网站功能 快速启动该项目 安装 mysql 安装 python3 建立虚拟 ...

  3. 慕课网 饿了么 vue2.0 项目

    饿了么 vue 项目总结 项目效果预览 ele效果预览 项目源码地址 ele源码 跟着慕课网黄轶老师 敲饿了么 vue 项目 作者项目源代码地址 项目完成之后 npm run build 这本来是写在 ...

  4. JavaScript进阶篇(慕课网)

    <h5>第1章 系好安全带,准备启航 </h5> <b>1.1让你认识JS</b> 1.1.1 JavaScript能做什么? 增强页面动态效果(如:下 ...

  5. Web前端技术人才抢手 慕课网揭秘前端学习技巧

    互联网的高速发展促使IT人才越来越抢手,web前端工程师这一职业备受青睐.那么如何成为一名优秀的Web前端工程师?IT在线教育为从业人员提供了便捷.有效的学习途径.中国最大的IT实战学习平台--慕课网 ...

  6. 【恢复】慕课网《网页布局基础》学习笔记

    好久之前,最初入坑前端时的学习笔记.那时候「慕课网」的几个路径还是免费的,也有好几个跟网页布局有关的课程,其中有一个叫<网页布局基础>讲得很棒,那时候刚好喜欢上 markdown 写作,于 ...

  7. 史上最全慕课网免费职业路径,总有一个适合你

    相信很多小伙伴都看过慕课网的视频,在慕课网还没有出收费视频的时候,它有很多的"职业路径"的视频,就是把很多比较散的视频分门别类的按照由基础到高级整理成一系列,这样节省了大家很多的时 ...

  8. 夜空中最亮的星:慕课网新手学习指南_慕课手记

    首先标题是为了凑够标准的十个字,如果你这会去数了一下然后想评论说不是十个字,那我佩服你的求知精神...进来的肯定不是看我瞎扯淡的,我们步入正题. 慕课网作为国内不能说是最大,但是起码口碑最好的一个IT ...

  9. 凤凰网制作的 “中国挺住” 桌面与MSN,QQ头像下载

    凤凰网制作的 "中国挺住" 桌面与MSN,QQ头像下载. 点击下载 转载于:https://www.cnblogs.com/yajiya/archive/2008/05/24/12 ...

最新文章

  1. 多层感知器(MLP)详解【基于印第安人糖尿病数据】
  2. 学python需要什么基础知识-学Python需要什么基础知识?零基础可以学Python吗?
  3. python 03 字符串详解
  4. 【程序员比赛】CISCN 2021 ezj4va与Fix思路
  5. python优秀库_2017年度15个优秀的数据科学领域Python库
  6. 从虚拟主机时代说起,详述Kubernetes带来的变革
  7. 双边滤波方法原理与代码实践(附完整代码)
  8. NTP服务器搭建教程
  9. java中Executor、ExecutorService、ThreadPoolExecutor介绍(转)
  10. 基于51单片机的酒精检测仪设计
  11. Mac下的常用快捷键操作
  12. r语言变量长度不一致怎么办_R语言实现数据离散化方法总结
  13. iTunes 给iPhone制作铃声
  14. jmf608硬盘修复_JMF608固态硬盘主控 SSD套料 SSD电路板 SATA3 封装BGA152|TSOP48
  15. 哈希表解决冲突的方式
  16. 基于stm32的两轮自平衡小车3(硬件篇)
  17. 微信支付小程序支付和APP支付
  18. win10总是很快自动休眠,设置休眠时间也无效?
  19. 学Java到底用什么电脑好呢?
  20. day06数组-一维数组二维数组

热门文章

  1. 升级到什么能换鸿蒙,想换华为手机选择这5部:最低1599,最高8999,都能升级到鸿蒙...
  2. Android编译及编译脚本、Android构建基础学习笔记
  3. php读取文件行读,如何在php中按行读取文件
  4. 【高并发】深入解析Callable接口
  5. mysql skip用法_【MySql】sql_slave_skip_counter 参数的用法解析
  6. word2vector之Skip_Gram模型详解
  7. html 获取页面元素高度,浅谈JavaScript获取元素的大小(高度和宽度)的方法
  8. DELL服务器配置RAID
  9. CodeMix安装教程
  10. 内联函数与宏函数的区别