版本:
Python 3.5
Django 1.11
后台管理:
xadmin
系统概括:
系统具有完整的用户登录注册以及找回密码功能,拥有完整个人中心。个人中心: 修改头像,修改密码,修改邮箱,可以看到我的课程以及我的收藏。可以删除收藏,我的消息。导航栏: 公开课,授课讲师,授课机构,全局搜索。点击公开课–> 课程列表,排序-搜索。热门课程推荐,课程的分页。点击课程–> 课程详情页中对课程进行收藏,取消收藏。富文本展示课程内容。点击开始学习–> 课程的章节信息,课程的评论信息。课程资源的下载链接。点击授课讲师–>授课讲师列表页,对讲师进行人气排序以及分页,右边有讲师排行榜。点击讲师的详情页面–> 对讲师进行收藏和分享,以及讲师的全部课程。导航栏: 授课机构有分页,排序筛选功能。机构列表页右侧有快速提交我要学习的表单。点击机构–> 左侧:机构首页,机构课程,机构介绍,机构讲师。后台管理系统可以切换主题。左侧每一个功能都有列表显示, 增删改查,筛选功能。课程列表页可以对不同字段进行排序。选择多条记录进行删除操作。课程列表页:过滤器->选择字段范围等,搜索,导出csv,xml,json。课程新增页面上传图片,富文本的编辑。时间选择,添加章节,添加课程资源。日志记录:记录后台人员的操作1.2.1前台功能模块
users
-UserProfile(用户信息) :昵称、生日、性别、地址、手机号码、头像
-EmailVerifyRecord(邮箱验证码):验证码、邮箱、类型(是找回密码还是注册)、时间
-Banner(轮播图):标题、轮播图、url、顺序、添加时间
course
-Course(课程):课程名、描述、详情、课程难度、学习时长
-Lesson(章节):课程名、章节名、添加时间
-Video(视频):课程名、视频名、添加时间
-CourseResource(课程资源):课程名、名称、资源文件、添加时间
organization
-CoureseOrg(课程机构):名称、描述、点击数、收藏数、封面图
-CityDict(城市):名字、描述、添加时间
-Teacher(教师):所属机构、教师姓名、工作时间、就职公司
operation
-UserAsk(用户咨询):名字、手机号、课程名、添加时间
-CourseComments(课程评论):用户、课程、评论、添加时间
-UserFavorite(用户收藏):用户、数据id、收藏类型、添加时间
-UserMessage(用户信息):接受用户、消息内容、是否已读、添加时间
-Usercourse(用户课程):用户、课程、添加时间
创建上面四个app
python manage.py startapp users python manage.py startapp organization python manage.py startapp course python manage.py startapp opetation创建package:apps -->把四个app拖到apps包里面,不要勾选Search for references
在apps中右键mark为sourceRoot。在根目录下找不到,回去apps下搜索,然后在settings设置
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'))必须安装pymysql 和pillow (因为Image字段需要用到pillow所以需要安装该库)
pip install pymysql pip install pillow
在settings中修改数据库:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'POST': '3306', 'USER': 'root', 'PASSWORD': '123456', 'NAME': 'mxonline', } }在mxonline文件夹下的__init.py__添加mysql,作为数据库
import pymysql pymysql.install_as_MySQLdb()将四个app注册到settings中:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', 'course', 'organization', 'operation', ]django会为我们默认生成数据表,默认生成的数据表有以下字段:
id: 主键、password 密码、 last_login记录用户最后登录时间、is_superuser 表明用户是否是超级用户、username 用户名字段不要随便改动、email 邮箱、is_staff 表示是否是员工、is_active 用户是否是激活状态, date_joined 注册时间当我django默认生成的数据表不够我们使用时候,我们需要扩展数据库表
apps/users/models.py代码from datetime import datetime from django.db import models from django.contrib.auth.models import AbstractUser class UserProfile(AbstractUser): '''用户个人中心''' gender_choices = (('male', '男'), ('female','女')) nick_name = models.CharField(verbose_name='昵称', max_length=50, default='') birthday = models.DateField(verbose_name='生日', null=True, blank=True) gender = models.CharField(verbose_name='性别', max_length=10, choices=gender_choices, default='female') address = models.CharField(verbose_name='地址', max_length=100, default='') mobile = models.CharField(verbose_name='手机号', max_length=11, null=True, blank=True) image = models.ImageField(upload_to='image/%Y%m', default='image/default.png', max_length=100) class Meta: verbose_name = "用户信息" verbose_name_plural = verbose_name def __str__(self): return self.username class EmailVerifyRecord(models.Model): '''验证码''' send_choices =(('register', '注册'), ('forget', '找回密码')) code = models.CharField(verbose_name='验证码', max_length=20) email = models.EmailField(verbose_name='邮箱', max_length=50) send_type = models.CharField(choices=send_choices, max_length=10) send_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = "邮箱验证码" verbose_name_plural = verbose_name class Bnner(models.Model): '''image上传文件,url保存图片路径,index控制轮播图的播放顺序''' title = models.CharField(verbose_name="标题", max_length=100) image = models.ImageField(verbose_name='轮播图', upload_to='banner/%Y%m', max_length=100) url = models.URLField(verbose_name='访问地址', max_length=200) index = models.IntegerField(verbose_name='顺序', default=100) add_time = models.DateTimeField(verbose_name='添加时间', default=datetime.now) class Meta: verbose_name = '轮播图' verbose_name_plural = verbose_name
在setttings中,重载AUTH_USER_MODEL
AUTH_USER_MODEL = 'users.UserProfile'apps/course/models.py代码
from datetime import datetime from django.db import models class Course(models.Model): '''课程表''' DEGREE_CHOICES = (("cj", "初级"),("zj", "中级"), ("gj", "高级")) name = models.CharField(verbose_name="课程名", max_length=50) desc = models.CharField(verbose_name="课程描述", max_length=300) detail = models.TextField(verbose_name="课程详情") degree = models.CharField('难度', choices=DEGREE_CHOICES, max_length=2) learn_times = models.IntegerField(verbose_name="学习时长(分钟数)", default=0) students = models.IntegerField(verbose_name="学习人数", default=0) fav_nums = models.IntegerField(verbose_name="收藏人数", default=0) image = models.ImageField(verbose_name="封面图", upload_to="courses/%Y/%m", max_length=100) click_nums = models.IntegerField(verbose_name="点击数", default=0) add_time = models.DateTimeField(verbose_name="添加时间", default=datetime.now) class Meta: verbose_name = "课程" verbose_name_plural = verbose_name def __str__(self): return self.name class Lesson(models.Model): '''章节信息表''' course = models.ForeignKey(Course) name = models.CharField(verbose_name="章节名", max_length=100) add_time = models.DateTimeField(verbose_name="添加时间", default=datetime.now) class Meta: verbose_name = "章节" verbose_name_plural = verbose_name def __str__(self): return '《{0}》课程的章节 >> {1}'.format(self.course, self.name) class Video(models.Model): '''视频表''' lesson = models.ForeignKey(Lesson, verbose_name="章节", on_delete=models.CASCADE) name = models.CharField(verbose_name="视频名",max_length=100) add_time = models.DateTimeField(verbose_name="添加时间", default=datetime.now) class Meta: verbose_name = "视频" verbose_name_plural = verbose_name class CourseResource(models.Model): '''课程资源表''' course = models.ForeignKey(Course, verbose_name="课程",on_delete=models.CASCADE) name = models.CharField(verbose_name="名称", max_length=100) download = models.FileField("资源文件", upload_to="course/resource/%Y/%m", max_length=100) add_time = models.DateTimeField(verbose_name="添加时间", default=datetime.now) class Meta: verbose_name = "课程资源" verbose_name_plural = verbose_name
对模型进行迁移:
python manage.py makemigrations python manage.py migrate
转载于:https://www.cnblogs.com/Jiangchuanwei/p/9110686.html
相关资源:DirectX修复工具V4.0增强版