django+xadmin在线教育平台慕学网(一)

it2022-05-05  143

一、前言

版本:

  Python  3.5

  Django  1.11

后台管理:

  xadmin

1.1 项目介绍

  系统概括: 

系统具有完整的用户登录注册以及找回密码功能,拥有完整个人中心。个人中心: 修改头像,修改密码,修改邮箱,可以看到我的课程以及我的收藏。可以删除收藏,我的消息。导航栏: 公开课,授课讲师,授课机构,全局搜索。点击公开课–> 课程列表,排序-搜索。热门课程推荐,课程的分页。点击课程–> 课程详情页中对课程进行收藏,取消收藏。富文本展示课程内容。点击开始学习–> 课程的章节信息,课程的评论信息。课程资源的下载链接。点击授课讲师–>授课讲师列表页,对讲师进行人气排序以及分页,右边有讲师排行榜。点击讲师的详情页面–> 对讲师进行收藏和分享,以及讲师的全部课程。导航栏: 授课机构有分页,排序筛选功能。机构列表页右侧有快速提交我要学习的表单。点击机构–> 左侧:机构首页,机构课程,机构介绍,机构讲师。后台管理系统可以切换主题。左侧每一个功能都有列表显示, 增删改查,筛选功能。课程列表页可以对不同字段进行排序。选择多条记录进行删除操作。课程列表页:过滤器->选择字段范围等,搜索,导出csv,xml,json。课程新增页面上传图片,富文本的编辑。时间选择,添加章节,添加课程资源。日志记录:记录后台人员的操作

1.2整站模块划分

1.2.1前台功能模块

 

1.3创建django项目

django-admin startproject mxonline

 

二、关于model设计

  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', ]

2.1、users表

   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'

 2.2、course 表

  

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

  

2.3、organization

apps/organization/models.py代码 from datetime import datetime from django.db import models class CityDict(models.Model): '''城市信息''' name = models.CharField(verbose_name='城市',max_length=20) desc = models.CharField(verbose_name='描述',max_length=200) add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = '城市' verbose_name_plural= verbose_name class CourseOrg(models.Model): '''课程机构基本信息''' name = models.CharField(verbose_name='机构名称',max_length=50) desc = models.TextField(verbose_name='机构描述') click_nums = models.IntegerField(verbose_name='点击数',default=0) fav_nums = models.IntegerField(verbose_name='收藏数',default=0) image = models.ImageField(verbose_name='封面图',upload_to='org/%Y%m',max_length=100) address = models.CharField(verbose_name='机构地址',max_length=150,) city = models.ForeignKey(CityDict,verbose_name='所在城市',on_delete=models.CASCADE) 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='所属机构',on_delete=models.CASCADE) name = models.CharField(verbose_name='教师名',max_length=50) work_years = models.IntegerField(verbose_name='工作年限',default=0) work_company = models.CharField(verbose_name='就职公司',max_length=50) work_position = models.CharField(verbose_name='公司职位',max_length=50) points = models.CharField(verbose_name='教学特点',max_length=50) click_nums = models.IntegerField(verbose_name='点击数',default=0) fav_nums = models.IntegerField(verbose_name='收藏数',default=0) add_time = models.DateTimeField(default=datetime.now) class Meta: verbose_name = '教师' verbose_name_plural = verbose_name def __str__(self): return "[{0}]的教师: {1}".format(self.org, self.name)

 

2.4、operation 

apps/operation/models.py代码 from django.db import models from users.models import UserProfile from course.models import Course from datetime import datetime class UserAsk(models.Model): '''用户咨询''' name = models.CharField(verbose_name='姓名',max_length=20) mobile = models.CharField(verbose_name='手机',max_length=11) course_name = models.CharField(verbose_name='课程名',max_length=50) 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 UserMessage(models.Model): ''' 用户消息表''' user = models.IntegerField(verbose_name='接受用户',default=0) message = models.CharField(verbose_name='消息内容',max_length=500) has_read = models.BooleanField(verbose_name='是否已读',default=False) add_time = models.DateTimeField(verbose_name='添加时间', default=datetime.now) class Meta: verbose_name = '用户消息' verbose_name_plural = verbose_name class CourseComments(models.Model): ''' 用户评论''' user = models.ForeignKey(UserProfile,verbose_name='用户',on_delete=models.CASCADE) course = models.ForeignKey(Course,verbose_name='课程',on_delete=models.CASCADE) comments = models.CharField(verbose_name='评论',max_length=200) add_time = models.DateTimeField(verbose_name='添加时间', default=datetime.now) class Meta: verbose_name = '课程评论' verbose_name_plural = verbose_name class UserCourse(models.Model): user = models.ForeignKey(UserProfile,verbose_name='用户',on_delete=models.CASCADE) course = models.ForeignKey(Course,verbose_name='课程',on_delete=models.CASCADE) add_time = models.DateTimeField('添加时间', default=datetime.now) class Meta: verbose_name = '用户课程' verbose_name_plural = verbose_name class UserFavorite(models.Model): '''用户收藏''' FAV_TYPE = ((1,'课程'),(2,'课程机构'),(3,'讲师')) user = models.ForeignKey(UserProfile,verbose_name='用户',on_delete=models.CASCADE) fav_id = models.IntegerField(verbose_name='数据id',default=0) fav_type = models.IntegerField(verbose_name='收藏类型',choices=FAV_TYPE,default=1) 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增强版

最新回复(0)