Django建教育平台(三)--创建各App及其model
2017-07-30 10:53
555 查看
1. 新建courses app
在manage.py命令行输入startapp courses2. 规划courses的表
需要有一个表记录各个课程名称等信息, 每个课程需要有一个表记录各个章节信息, 每个章节需要有一个表记录各节课时的视频信息, 因此需要设计三个表.另外, 每个课程需要下载一些辅助资源, 因此, 还需要加辅助资源表.
3. 编写courses的models
from datetime import datetime from django.db import models class Course(models.Model): name = models.CharField(max_length=50, verbose_name="课程名") desc = models.CharField(max_length=300, verbose_name="课程描述") detail = models.TextField(verbose_name="课程详情") # 暂时定义成textfield, 后续会改为支持富文本的类型 degree = models.CharField(choices=(("cj", "初级"), ("zj", "中级"), ("gj", "高级")), max_length=2) learn_times = models.IntegerField(default=0, verbose_name="学习时长(分钟数") students = models.IntegerField(default=0, verbose_name="学习人数") fav_nums = models.IntegerField(default=0, verbose_name="收藏人数") image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="封面图", max_length=100) click_nums = models.IntegerField(default=0, verbose_name="点击数") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "课程" verbose_name_plural = verbose_name class Lesson(models.Model): course = models.ForeignKey(Course, verbose_name="课程") name = models.CharField(max_length=100, verbose_name="章节名") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "章节" verbose_name_plural = verbose_name class Video(models.Model): lesson = models.ForeignKey(Lesson, verbose_name="章节") name = models.CharField(max_length=100, verbose_name="视频名") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "视频" verbose_name_plural = verbose_name class CourseResource(models.Model): course = models.ForeignKey(Lesson, verbose_name="课程") name = models.CharField(max_length=100, verbose_name="名称") download = models.FileField(upload_to="course/resource/%Y/%m", verbose_name="资源文件", max_length=100) add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "课程资源" verbose_name_plural = verbose_name
4. 新建organization app
在manage.py命令行输入startapp organization5. 规划organization的表
6. 编写organization的models
from datetime import datetime from django.db import models class CityDict(models.Model): name = models.CharField(max_length=20, verbose_name="城市") desc = models.CharField(max_length=200, verbose_name="描述") add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = "城市" verbose_name_plural = verbose_name class CourseOrg(mo 4000 dels.Model): name = models.CharField(max_length=50, verbose_name="机构名称") desc = models.TextField(verbose_name="机构描述") click_num = models.IntegerField(default=0, verbose_name="点击数") fav_nums = models.IntegerField(default=0, verbose_name="收藏数目") image = models.ImageField(upload_to="org/%Y/%m", verbose_name="封面图", max_length=100) address = models.CharField(max_length=150, verbose_name="机构地址") city = models.ForeignKey(CityDict, verbose_name="所在城市") add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = "课程机构" verbose_name_plural = verbose_name class Teacher(models.Model): org = models.ForeignKey(CourseOrg, 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="教学特点") click_num = models.IntegerField(default=0, verbose_name="点击数") fav_nums = models.IntegerField(default=0, verbose_name="收藏数目") add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = "教师" verbose_name_plural = verbose_name
7. 新建operation app
manage.py的命令行中输入startapp operation8. 规划operation的表格
9. 编写operation models
from datetime import datetime from django.db import models from users.models import UserProfile from courses.models import Course class UserAsk(models.Model): 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="课程名") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "用户咨询" verbose_name_plural = verbose_name class CourseComments(models.Model): # 课程评论 user = models.ForeignKey(UserProfile, verbose_name="用户") course = models.ForeignKey(Course, verbose_name="课程") comments = models.CharField(max_length=200, verbose_name="评论") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "课程评论" verbose_name_plural = verbose_name class UserFavorite(models.Model): user = models.ForeignKey(UserProfile, verbose_name="用户") fav_id = models.IntegerField(default=0, verbose_name="数据id") fav_type = models.IntegerField(choices=((1, "课程"), (2, "课程机构"), (3, "讲师")), default=1, verbose_name="收藏类型") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "用户收藏" verbose_name_plural = verbose_name class UserMessage(models.Model): user = models.IntegerField(default=0, verbose_name="接收用户") # 如果为0, 则消息是群发, 如果不为0, 则代表发给id为x的用户 message = models.CharField(max_length=500, verbose_name="消息内容") has_read = models.BooleanField(default=False, verbose_name="是否已读") # False指未读 add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") # 消息发送时间 class Meta: verbose_name = "用户消息" verbose_name_plural = verbose_name class UserCourse(models.Model): user = models.ForeignKey(UserProfile, verbose_name="用户") course = models.ForeignKey(Course, verbose_name="课程") add_time = models.DateTimeField(default=datetime.now, verbose_name="添加时间") class Meta: verbose_name = "用户课程" verbose_name_plural = verbose_name
10. elearn_py3下settings注册各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', ]
11. 生成数据表
a. 在manage.py命令行输入makemigrations
b. 在manage.py命令行输入migrate
c. Navicat中检查数据表生成
Navicat中按F5刷新, 才能看到新建的表格① 就是courses app的表, ②是operation app的表, ③是organization app的表, ④是users app的表.
12. 将各app放在apps文件夹中
a. 在elearn_py3 project右击菜单中选择new, 点击Python package, 输入名字为apps
b. 按着Ctrl键, 点击users,course, organization, operation文件夹, 拖到apps文件夹中
在弹出菜单中, 取消两个复选框的选择.
c. 将apps设置为sources root
修改前: django找不到各app所在地, 显示红色波浪线
修改后: django找到app所在地, 不会显示红波浪线线.
d.修改setting中搜索目录
这样可以避免在命令行运行app时找不到相应的model.
添加以下标示#新增代码
import os import sys # 新增代码 # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, os.path.join(BASE_DIR, "apps")) # 新增代码
相关文章推荐
- 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表
- 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
- Django建教育平台(五)--各app的model注册
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(14)——各个App的adminx.py的设置
- django学习笔记【003】创建第一个带有model的app
- 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理
- Django学习笔记(二)App创建之Model
- django新建app以及model的创建
- Django 创建新App及其常用命令
- ④Windows7 Django1.5--创建app,建立model,
- django学习笔记【004】创建带有model的app
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(5)
- Python的Django框架完成一个完整的论坛(3.创建app的models.py、views.py源码)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(11)——makemigrations
- django创建model
- Django -----虚拟环境、服务器、创建项目、创建webApp,model,和注册model
- Django中文官方版02-创建app
- frist Django app— 二、 Model和管理界面