您的位置:首页 > 移动开发

Django建教育平台(三)--创建各App及其model

2017-07-30 10:53 555 查看

1. 新建courses app

在manage.py命令行输入startapp courses



2. 规划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 organization

5. 规划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 operation

8. 规划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"))  # 新增代码


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐