日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django+xadmin在线教育平台慕学网(一) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言

版本:

  Python  3.5

  Django  1.11

后臺(tái)管理:

  xadmin

1.1 項(xiàng)目介紹

  系統(tǒng)概括: 

  • 系統(tǒng)具有完整的用戶(hù)登錄注冊(cè)以及找回密碼功能,擁有完整個(gè)人中心。
  • 個(gè)人中心: 修改頭像,修改密碼,修改郵箱,可以看到我的課程以及我的收藏。可以刪除收藏,我的消息。
  • 導(dǎo)航欄: 公開(kāi)課,授課講師,授課機(jī)構(gòu),全局搜索。
  • 點(diǎn)擊公開(kāi)課–> 課程列表,排序-搜索。熱門(mén)課程推薦,課程的分頁(yè)。
  • 點(diǎn)擊課程–> 課程詳情頁(yè)中對(duì)課程進(jìn)行收藏,取消收藏。富文本展示課程內(nèi)容。
  • 點(diǎn)擊開(kāi)始學(xué)習(xí)–> 課程的章節(jié)信息,課程的評(píng)論信息。課程資源的下載鏈接。
  • 點(diǎn)擊授課講師–>授課講師列表頁(yè),對(duì)講師進(jìn)行人氣排序以及分頁(yè),右邊有講師排行榜。
  • 點(diǎn)擊講師的詳情頁(yè)面–> 對(duì)講師進(jìn)行收藏和分享,以及講師的全部課程。
  • 導(dǎo)航欄: 授課機(jī)構(gòu)有分頁(yè),排序篩選功能。
  • 機(jī)構(gòu)列表頁(yè)右側(cè)有快速提交我要學(xué)習(xí)的表單。
  • 點(diǎn)擊機(jī)構(gòu)–> 左側(cè):機(jī)構(gòu)首頁(yè),機(jī)構(gòu)課程,機(jī)構(gòu)介紹,機(jī)構(gòu)講師。
  • 后臺(tái)管理系統(tǒng)可以切換主題。左側(cè)每一個(gè)功能都有列表顯示, 增刪改查,篩選功能。
  • 課程列表頁(yè)可以對(duì)不同字段進(jìn)行排序。選擇多條記錄進(jìn)行刪除操作。
  • 課程列表頁(yè):過(guò)濾器->選擇字段范圍等,搜索,導(dǎo)出csv,xml,json。
  • 課程新增頁(yè)面上傳圖片,富文本的編輯。時(shí)間選擇,添加章節(jié),添加課程資源。
  • 日志記錄:記錄后臺(tái)人員的操作

1.2整站模塊劃分

1.2.1前臺(tái)功能模塊

?

1.3創(chuàng)建django項(xiàng)目

django-admin startproject mxonline

?

二、關(guān)于model設(shè)計(jì)

  users

    -UserProfile(用戶(hù)信息)?:昵稱(chēng)、生日、性別、地址、手機(jī)號(hào)碼、頭像

    -EmailVerifyRecord(郵箱驗(yàn)證碼):驗(yàn)證碼、郵箱、類(lèi)型(是找回密碼還是注冊(cè))、時(shí)間

    -Banner(輪播圖):標(biāo)題、輪播圖、url、順序、添加時(shí)間

  course

    -Course(課程):課程名、描述、詳情、課程難度、學(xué)習(xí)時(shí)長(zhǎng)

    -Lesson(章節(jié)):課程名、章節(jié)名、添加時(shí)間

    -Video(視頻):課程名、視頻名、添加時(shí)間

    -CourseResource(課程資源):課程名、名稱(chēng)、資源文件、添加時(shí)間

  organization

    -CoureseOrg(課程機(jī)構(gòu)):名稱(chēng)、描述、點(diǎn)擊數(shù)、收藏?cái)?shù)、封面圖

    -CityDict(城市):名字、描述、添加時(shí)間

    -Teacher(教師):所屬機(jī)構(gòu)、教師姓名、工作時(shí)間、就職公司

  operation

    -UserAsk(用戶(hù)咨詢(xún)):名字、手機(jī)號(hào)、課程名、添加時(shí)間

    -CourseComments(課程評(píng)論):用戶(hù)、課程、評(píng)論、添加時(shí)間

    -UserFavorite(用戶(hù)收藏):用戶(hù)、數(shù)據(jù)id、收藏類(lèi)型、添加時(shí)間

    -UserMessage(用戶(hù)信息):接受用戶(hù)、消息內(nèi)容、是否已讀、添加時(shí)間

    -Usercourse(用戶(hù)課程):用戶(hù)、課程、添加時(shí)間

    

  創(chuàng)建上面四個(gè)app  

python manage.py startapp users python manage.py startapp organization python manage.py startapp course python manage.py startapp opetation

  創(chuàng)建package:apps -->把四個(gè)app拖到apps包里面,不要勾選Search for references

  在apps中右鍵mark為sourceRoot。在根目錄下找不到,回去apps下搜索,然后在settings設(shè)置

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 (因?yàn)镮mage字段需要用到pillow所以需要安裝該庫(kù))

pip install pymysql pip install pillow

  

  在settings中修改數(shù)據(jù)庫(kù):

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1','POST': '3306','USER': 'root','PASSWORD': '123456','NAME': 'mxonline',} }

  在mxonline文件夾下的__init.py__添加mysql,作為數(shù)據(jù)庫(kù)

import pymysql pymysql.install_as_MySQLdb()

  將四個(gè)app注冊(cè)到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會(huì)為我們默認(rèn)生成數(shù)據(jù)表,默認(rèn)生成的數(shù)據(jù)表有以下字段:

id: 主鍵、password 密碼、 last_login記錄用戶(hù)最后登錄時(shí)間、
is_superuser 表明用戶(hù)是否是超級(jí)用戶(hù)、username 用戶(hù)名字段不要隨便改動(dòng)、
email 郵箱、is_staff 表示是否是員工、
is_active 用戶(hù)是否是激活狀態(tài), date_joined 注冊(cè)時(shí)間

?  當(dāng)我django默認(rèn)生成的數(shù)據(jù)表不夠我們使用時(shí)候,我們需要擴(kuò)展數(shù)據(jù)庫(kù)表

  • apps/users/models.py代碼

  

from datetime import datetimefrom django.db import models from django.contrib.auth.models import AbstractUserclass UserProfile(AbstractUser):
  '''用戶(hù)個(gè)人中心'''gender_choices = (('male', '男'), ('female','女'))nick_name = models.CharField(verbose_name='昵稱(chēng)', 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='手機(jī)號(hào)', 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 = "用戶(hù)信息"verbose_name_plural = verbose_namedef __str__(self):return self.usernameclass EmailVerifyRecord(models.Model):
  '''驗(yàn)證碼'''send_choices =(('register', '注冊(cè)'), ('forget', '找回密碼'))code = models.CharField(verbose_name='驗(yàn)證碼', 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 = "郵箱驗(yàn)證碼"verbose_name_plural = verbose_nameclass Bnner(models.Model):'''image上傳文件,url保存圖片路徑,index控制輪播圖的播放順序'''title = models.CharField(verbose_name="標(biāo)題", max_length=100)image = models.ImageField(verbose_name='輪播圖', upload_to='banner/%Y%m', max_length=100)url = models.URLField(verbose_name='訪(fǎng)問(wèn)地址', max_length=200)index = models.IntegerField(verbose_name='順序', default=100)add_time = models.DateTimeField(verbose_name='添加時(shí)間', 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 datetimefrom django.db import modelsclass Course(models.Model):'''課程表'''DEGREE_CHOICES = (("cj", "初級(jí)"),("zj", "中級(jí)"), ("gj", "高級(jí)"))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="學(xué)習(xí)時(shí)長(zhǎng)(分鐘數(shù))", default=0)students = models.IntegerField(verbose_name="學(xué)習(xí)人數(shù)", default=0)fav_nums = models.IntegerField(verbose_name="收藏人數(shù)", default=0)image = models.ImageField(verbose_name="封面圖", upload_to="courses/%Y/%m", max_length=100)click_nums = models.IntegerField(verbose_name="點(diǎn)擊數(shù)", default=0)add_time = models.DateTimeField(verbose_name="添加時(shí)間", default=datetime.now)class Meta:verbose_name = "課程"verbose_name_plural = verbose_namedef __str__(self):return self.nameclass Lesson(models.Model):'''章節(jié)信息表'''course = models.ForeignKey(Course)name = models.CharField(verbose_name="章節(jié)名", max_length=100)add_time = models.DateTimeField(verbose_name="添加時(shí)間", default=datetime.now)class Meta:verbose_name = "章節(jié)"verbose_name_plural = verbose_namedef __str__(self):return '《{0}》課程的章節(jié) >> {1}'.format(self.course, self.name)class Video(models.Model):'''視頻表'''lesson = models.ForeignKey(Lesson, verbose_name="章節(jié)", on_delete=models.CASCADE)name = models.CharField(verbose_name="視頻名",max_length=100)add_time = models.DateTimeField(verbose_name="添加時(shí)間", default=datetime.now)class Meta:verbose_name = "視頻"verbose_name_plural = verbose_nameclass CourseResource(models.Model):'''課程資源表'''course = models.ForeignKey(Course, verbose_name="課程",on_delete=models.CASCADE)name = models.CharField(verbose_name="名稱(chēng)", max_length=100)download = models.FileField("資源文件", upload_to="course/resource/%Y/%m", max_length=100)add_time = models.DateTimeField(verbose_name="添加時(shí)間", default=datetime.now)class Meta:verbose_name = "課程資源"verbose_name_plural = verbose_name

  

2.3、organization

  • apps/organization/models.py代碼
from datetime import datetimefrom django.db import modelsclass 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_nameclass CourseOrg(models.Model):'''課程機(jī)構(gòu)基本信息'''name = models.CharField(verbose_name='機(jī)構(gòu)名稱(chēng)',max_length=50)desc = models.TextField(verbose_name='機(jī)構(gòu)描述')click_nums = models.IntegerField(verbose_name='點(diǎn)擊數(shù)',default=0)fav_nums = models.IntegerField(verbose_name='收藏?cái)?shù)',default=0)image = models.ImageField(verbose_name='封面圖',upload_to='org/%Y%m',max_length=100)address = models.CharField(verbose_name='機(jī)構(gòu)地址',max_length=150,)city = models.ForeignKey(CityDict,verbose_name='所在城市',on_delete=models.CASCADE)add_time = models.DateTimeField(default=datetime.now)class Meta:verbose_name = '課程機(jī)構(gòu)'verbose_name_plural = verbose_nameclass Teacher(models.Model):'''教師基本信息'''org = models.ForeignKey(CourseOrg,verbose_name='所屬機(jī)構(gòu)',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='教學(xué)特點(diǎn)',max_length=50)click_nums = models.IntegerField(verbose_name='點(diǎn)擊數(shù)',default=0)fav_nums = models.IntegerField(verbose_name='收藏?cái)?shù)',default=0)add_time = models.DateTimeField(default=datetime.now)class Meta:verbose_name = '教師'verbose_name_plural = verbose_namedef __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 Coursefrom datetime import datetimeclass UserAsk(models.Model):'''用戶(hù)咨詢(xún)'''name = models.CharField(verbose_name='姓名',max_length=20)mobile = models.CharField(verbose_name='手機(jī)',max_length=11)course_name = models.CharField(verbose_name='課程名',max_length=50)add_time = models.DateTimeField(verbose_name='添加時(shí)間',default=datetime.now)class Meta:verbose_name = '用戶(hù)咨詢(xún)'verbose_name_plural = verbose_namedef __str__(self):return self.nameclass UserMessage(models.Model):''' 用戶(hù)消息表'''user = models.IntegerField(verbose_name='接受用戶(hù)',default=0)message = models.CharField(verbose_name='消息內(nèi)容',max_length=500)has_read = models.BooleanField(verbose_name='是否已讀',default=False)add_time = models.DateTimeField(verbose_name='添加時(shí)間', default=datetime.now)class Meta:verbose_name = '用戶(hù)消息'verbose_name_plural = verbose_nameclass CourseComments(models.Model):''' 用戶(hù)評(píng)論'''user = models.ForeignKey(UserProfile,verbose_name='用戶(hù)',on_delete=models.CASCADE)course = models.ForeignKey(Course,verbose_name='課程',on_delete=models.CASCADE)comments = models.CharField(verbose_name='評(píng)論',max_length=200)add_time = models.DateTimeField(verbose_name='添加時(shí)間', default=datetime.now)class Meta:verbose_name = '課程評(píng)論'verbose_name_plural = verbose_nameclass UserCourse(models.Model):user = models.ForeignKey(UserProfile,verbose_name='用戶(hù)',on_delete=models.CASCADE)course = models.ForeignKey(Course,verbose_name='課程',on_delete=models.CASCADE)add_time = models.DateTimeField('添加時(shí)間', default=datetime.now)class Meta:verbose_name = '用戶(hù)課程'verbose_name_plural = verbose_nameclass UserFavorite(models.Model):'''用戶(hù)收藏'''FAV_TYPE = ((1,'課程'),(2,'課程機(jī)構(gòu)'),(3,'講師'))user = models.ForeignKey(UserProfile,verbose_name='用戶(hù)',on_delete=models.CASCADE)fav_id = models.IntegerField(verbose_name='數(shù)據(jù)id',default=0)fav_type = models.IntegerField(verbose_name='收藏類(lèi)型',choices=FAV_TYPE,default=1)add_time = models.DateTimeField(verbose_name='添加時(shí)間', default=datetime.now)class Meta:verbose_name = '用戶(hù)收藏'verbose_name_plural = verbose_name

  

?  對(duì)模型進(jìn)行遷移:

python manage.py makemigrations python manage.py migrate

  

  

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Jiangchuanwei/p/9110686.html

總結(jié)

以上是生活随笔為你收集整理的django+xadmin在线教育平台慕学网(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。