摘 要
本設計采用Python中的Django框架實現Mooc后臺管理界面設計,django是一個完整的開源web開源框架,使用起來能夠快速的搭建你想要的網站,由于django自帶后臺管理系統,本設計中后臺管理模板采用功能更加強大的Xadmin實現。數據庫部分采用mysql5.7,由于django中有自帶封裝的數據庫驅動,所以我們只需要關心框架中的models類的設計即可,只需要將數據表中的類型和關系建立好關系,后臺管理系統基本上能夠實現表的增刪改查功能。
關鍵詞:Python;Django;Xadmin;Mysql;
前 言
隨著深度學習技術的發展及普及,在線教育領域的發展與人工智能的結合也
是愈發緊密。人工智能+教育便能夠把人工智能技術滲透到教學的核心環節中,
模擬特技老師,從根本上改進學習的理念和方式,這是真正意義上的教育變革。
在線教育平臺通過 VR、AR 結合 AI 算法與技術,構建識別和優化內容模型,
進而形成虛擬課堂效果,極大改善在線教育“學習體驗、效果差”等頑疾;通過
機器視覺、語音語義等技術,自動化批改、歸類作業,甚至可以建立一對一的在
線輔導,極大提升行業競爭力。
另外通過科技+教育的深度融合,能夠對學生數據進行科學評估,精準發掘
每一個學生在學習上的差別,制定個性化學習方案,實現因材施教,賦予孩子未
來更多可能。
與此同時,AI 技術還可廣泛用于學校的校園管理、區域的教育管理及教育
治理等相關領域,在優化企業運營策略、降低企業運營成本方面有著不可替代的
作用。
目前 VIPKID、噠噠英語、掌門 1 對 1、海風教育等眾多 K12 在線教育企業,
都已開始布局“AI+教育”產業,隨著頭部企業涌入,未來教育行業的 AI 浪潮將
更加猛烈。而這個項目就是在這種背景下實施的,進行一次教育推廣平臺的建設。
1.基本儲備
1.1 Python介紹
Python 是一種解釋型、面向對象、動態數據類型的高級程序設計語言。
Python 由 Guido van Rossum 于 1989 年底發明,第一個公開發行版發行于 1991 年。像 Perl 語言一樣, Python 源代碼同樣遵循 GPL(GNU General Public License) 協議。
Python具有以下明顯的優點:
(1)優雅體現在python的格式,比如縮進來確定代碼塊,可避免編程人員進行復雜的嵌套;
(2)明確體現在解決問題的方法只有一種最優選項,而perl語言是每個問題有很多最優解,但不利于團隊協作;
(3)有強大的第三方庫模塊,需要實現復雜功能,只需要調用現有的庫,可快速實現功能。20多年的發展,各種庫都已經完備,比如:郵件庫,爬蟲庫。
(4)可跨平臺移植,java有Java的虛擬機,python同樣;
(5)是一種面向對象的語言;
(6)是一種可擴展的語言(與C,C++,Java結合)。
1.2 Django介紹
Django 是一個高級的 Python 網絡框架,可以快速開發安全和可維護的網站。由經驗豐富的開發者構建,Django負責處理網站開發中麻煩的部分,因此你可以專注于編寫應用程序,而無需重新開發。
它是免費和開源的,有活躍繁榮的社區,豐富的文檔,以及很多免費和付費的解決方案。
(1)完備性:
Django遵循“功能完備”的理念,提供開發人員可能想要“開箱即用”的幾乎所有功能。因為你需要的一切都是一個”產品“的一部分,它們都可以無縫結合在一起,遵循一致性設計原則,并且具有廣泛和最新的文檔。
(2)通用性:
Django 可以(并已經)用于構建幾乎任何類型的網站—從內容管理系統和維基,到社交網絡和新聞網站。它可以與任何客戶端框架一起工作,并且可以提供幾乎任何格式(包括 HTML,Rss源,JSON,XML等)的內容。你正在閱讀的網站就是基于Django。在內部,盡管它為幾乎所有可能需要的功能(例如幾個流行的數據庫,模版引擎等)提供了選擇,但是如果需要,它也可以擴展到使用其他組件。
(3)安全性:
Django 幫助開發人員通過提供一個被設計為“做正確的事情”來自動保護網站的框架來避免許多常見的安全錯誤。例如,Django提供了一種安全的方式來管理用戶賬戶和密碼,避免了常見的錯誤,比如將session放在cookie中這種易受攻擊的做法(取而代之的是cookies只包含一個密鑰,實際數據存儲在數據庫中)或直接存儲密碼而不是密碼哈希。
(4)可擴展:
Django 使用基于組件的 “無共享” 架構 (架構的每一部分獨立于其他架構,因此可以根據需要進行替換或更改). 在不用部分之間有明確的分隔意味著它可以通過在任何級別添加硬件來擴展服務:緩存服務器,數據庫服務器或應用程序服務器。一些最繁忙的網站已經成功地縮放了Django,以滿足他們的需求(例如Instagram和Disqus,僅舉兩個例子,可自行添加)。
(5)可維護性:
Django 代碼編寫是遵照設計原則和模式,鼓勵創建可維護和可重復使用的代碼。特別是它使用了不要重復自己(DRY)原則,所以沒有不必要的重復,減少了代碼的數量。Django還將相關功能分組到可重用的“應用程序”中,并且在較低級別將相關代碼分組或模塊( 模型視圖控制器 (MVC)模式)。
(6)靈活性:
Django 是用Python編寫的,它在許多平臺上運行。這意味著你不受任務特定的服務器平臺的限制,并且可以在許多種類的Linux,Windows和Mac OsX 上運行應用程序。此外,Django得到許多網絡托管提供商的好評,他們經常提供特定的基礎設施和托管Django網站的文檔。
1.3 Mysql介紹
MYSQL 是一個關系型數據庫管理系統,由瑞典 MySQL AB 公司開發,目前屬于 Oracle 公司。MySQL 使用的 SQL 語言是用于訪問數據庫的最常用的標準化語言。
由于 MySQL 數據庫體積小、速度快、總體擁有成本低、開放源代碼,其有著廣泛的應用,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。由于其社區版的性能卓越,因此搭配 PHP 和 Apache 服務器可組成良好的開發環境。
2.需求分析
建站包括前臺功能系統和后臺管理系統兩大系統組成,分別由不同能力的人員實現,而前臺功能系統是屬于UI設計類的,后臺管理系統是程序類的,因此本設計選擇進行后臺管理系統設計。
由于本設計是后臺管理系統,所以需求主要是分為課程管理,認證管理和機構管理三個部分。實現基本功能是對于數據記錄的增刪改查,附加其它的功能,比如過濾器,排序,分頁,篩選等功能。整體建站分析如下圖2.1所示:
圖2.1 整體建站分析
2.1 課程管理模塊
課程管理模塊涉及到關于本站的課程的管理操作,主要的操作包括:課程管理、課程資源管理、課程評論管理和輪播課程管理等。
根據以上簡單分析,其需要編輯和實現的具體數據和變量如下表2.1所示:
表2.1 課程管理模塊
分類 內容
Course(課程) 課程名、描述、詳情、等級、學習時長等
Lesson(章節) 課程名、章節名、添加時間
Video(視頻) 課程名、視頻名、添加時間
CourseResource(課程資源) 課程名、名稱、資源文件、添加時間
2.2 認證和授權管理模塊
認證和授權管理模塊是關于用戶操作的模塊,主要的操作包括:用戶管理、組管理、權限管理、用戶日志管理等。
根據以上簡單分析,其需要編輯和實現的具體數據和變量如下表2.2所示:
表2.2 認證和授權管理模塊
組別 分類 內容
User UserProfile(用戶信息) 昵稱、生日、性別、地址
EmailVerify(郵箱驗證) 驗證碼、郵箱、發生類型、時間
Banner(輪廓圖) 標題,輪播圖、url、順序
Operation UserAsk(用戶咨詢) 名字、手機號、課程名、時間
CourseComment(用戶評論) 用戶、課程、評論、時間
UserFavorite(用戶收藏) 用戶、數據ID、收藏類型、時間
UserMessage(用戶消息) 接收用戶、消息內容、是否已讀
UserCourse(用戶課程) 用戶、課程、時間
2.3 機構管理模塊
機構管理模塊是關于課程發布機構的模塊,由于網站上線后允許不同機構在網站上進行開課活動,因此需要進行機構管理,主要包括:課程機構、課程機構管理、講輪播圖管理等。
根據以上簡單分析,其需要編輯和實現的具體數據和變量如下表2.3所示:
表2.3 機構管理模塊
分類 內容
CourseOrg(課程機構) 名稱、描述、點擊數、收藏數、封面
CityDict(城市) 名字、描述、添加時間
Teacher(教師) 所屬機構、教師名、工作年限、簡介
3.Django模型設計
模型設計是整個項目的核心部分,直接決定了項目后續的可行性,這里我們分為四個app來進行設計,分別是users,course,organization,operation,如下圖3.1所示:
圖3.1 django整體模型設計
因此,需要拆成4個app來分別完成以上分析的設計功能,分別是users,course,organization,operation:
python manage.py startapp users
python manage.py startapp course
python manage.py startapp organization
python manage.py startapp operation
3.1 users用戶
系統會自動生成user表單,包括:
id 主鍵, password 密碼, last_login Django自動記錄用戶最后登錄間。
is_superuser 表明用戶是否是超級用戶(后臺管理會用到)。
username 用戶名字段不要隨便改動, email 郵箱
is_staff 表示是否是員工(后臺管理會用到)。
is_active 用戶是否是激活狀態, date_joined 注冊時間。
表3.1 擴展表單
表名字 字段名 字段類型 字段長度(max_length) 是否為空 備注 其他
UserProfile
管理員 gender_choices enum ('male','男'),
('female','女') 性別 nick_name CharField 50 昵稱 birthday DateField True 生日 gender CharField 10 性別 choices=gender_choicesaddress CharField 100 地址 mobile CharField 11 True 手機號 image ImageField 100 圖片 upload_to='image/%Y%m'gadd_time DateTimeField 添加時間 ```
給出users/models.py代碼如下:
```PYTHON# users/models.pyfrom django.db import models
from django.contrib.auth.models import AbstractUserclass UserProfile(AbstractUser):gender_choices = (('male','男'),('female','女'))nick_name = models.CharField('昵稱',max_length=50,default='')birthday = models.DateField('生日',null=True,blank=True)gender = models.CharField('性別',max_length=10,\
choices=gender_choices,default='female')adress = models.CharField('地址',max_length=100,default='')mobile = models.CharField('手機號',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_namedef __str__(self):return self.username
3.2 Course 課程
根據上述需求的分析,課程模型的設計如下表3.2所示:
表3.2 course需求表單
degree_choices enum ("cj", "初級"),
("zj", "中級"),
("gj", "高級") 課程難度
Course
課程 name CharField 50 True 課程名description CharField 300 課程描述introduce UEditorField 600 '' 課程簡介degree CharField 2 cj 難度image ImageField 100 封面圖tag CharField 10 '' 課程標簽is_banner BooleanField False 是否輪播course_org ForeignKey null=True,blank=True, 所屬機構category ForeignKey 課程類別teacher ForeignKey null=True,blank=True, 講師youneed_know CharField 300 '' 課程須知teacher_tell CharField 300 '' 老師告訴你learn_times IntegerField 0 學習時長(分鐘)students IntegerField 0 學習人數fav_nums IntegerField 0 收藏人數click_nums IntegerField 0 點擊數money DecimalField 價格add_time DateTimeField datetime.now 添加時間
給出course/models.py代碼如下:
from datetime import datetime
from django.db import modelsclass Course(models.Model):DEGREE_CHOICES = (("cj", "初級"),("zj", "中級"),("gj", "高級"))name = models.CharField("課程名",max_length=50)desc = models.CharField("課程描述",max_length=300)detail = models.TextField("課程詳情")degree = models.CharField('難度',\
choices=DEGREE_CHOICES, max_length=2)learn_times = models.IntegerField("學習時長(分鐘數)",default=0)students = models.IntegerField("學習人數",default=0)fav_nums = models.IntegerField("收藏人數",default=0)image = models.ImageField("封面圖",upload_to="courses/%Y/%m",\
max_length=100)click_nums = models.IntegerField("點擊數",default=0)add_time = models.DateTimeField("添加時間",default=datetime.now,)class Meta:verbose_name = "課程"verbose_name_plural = verbose_namedef __str__(self):return self.name
3.3 Organization機構
根據上述需求的分析,機構模型的設計如下表3.3所示:
表3.3 organzation機構需求表單
表名字 字段名 字段類型 字段長度(max_length) 默認值(default) 備注
CourseOrg
課程機構基本信息 name CharField 50 機構名稱desc TextField 機構描述click_nums IntegerField 0 點擊數ORG_CHOICES ("pxjg", u"培訓機構"),
("gx", u"高校"),
("gr", u"個人"), category choices=ORG_CHOICES 機構類別fav_nums IntegerField 0 收藏數image ImageField 100 封面圖address CharField 150 機構地址city CharField 所在城市ordernum CharField 訂單數money CharField 總錢數teacher_num CharField 教師數add_time DateTimeField datetime.now 添加時間
給出organization/models.py代碼如下:
class CourseOrg(models.Model):name = models.CharField('機構名稱',max_length=50)desc = models.TextField('機構描述')click_nums = models.IntegerField('點擊數',default=0)fav_nums = models.IntegerField('收藏數',default=0)image = models.ImageField('封面圖',upload_to='org/%Y%m',max_length=100)address = models.CharField('機構地址',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
3.4 Operation 操作
根據上述需求的分析,操作模型的設計如下表3.4所示:
表3.4 operation需求表單
表名字 字段名 字段類型 默認值(default) 備注
UserCourse
用戶學習的課程 user CharField 用戶course CharField 課程add_time DateTimeField datetime.now 添加時間IS_FINISHED ((0,"未完成"),
(1,"已完成")) is_finished IntegerField 0
給出operation/models.py代碼如下:
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
4.Xadmin后臺管理
4.1 Xadmin的安裝和設置
可以訪問github開源倉庫獲取到源碼進行安裝,首先要獲得django2.0的zip文件,放置到已經安裝好pip工具的安裝目錄下,其源碼訪問鏈接為:
https://github.com/sshwsfc/xadmin/tree/django2
獲取到源碼后,解壓到pip安裝目錄,然后運行下面命令安裝:
pip install xadmin-django2
如果無法訪問github開源倉庫,可以更換安裝源,比如說使用豆瓣源,命令如下:
pip install -i https://pypi.douban.com/simple xadmin-django2
安裝完成后,同時也安裝了很多依賴的包。
以下進行Xadmin的設置,進行簡單分布操作如下:
(1)新建Python Package “extra_apps”,把源碼xadmin文件夾放到extra_apps文件夾下面,此時目錄結構如下:
MxOnline>extra_apps>xadmin>init.py
(2)把extra_apps右鍵mark為Source Root并在settings中加入:
sys.path.insert(0,os.path.join(BASE_DIR, ‘extra_apps’))
(3)因為我們用源碼的xadmin,所以要卸載之前安裝的:
pip uninstall xadmin
(4)配置路由,把admin改成xadmin,代碼如下所示:
# urls.py
from django.urls import path
import xadmin
urlpatterns = [path('xadmin/', xadmin.site.urls),
]
(5)注冊app,把下面兩個app注冊到settings.py的INSTALLED_APPS中配置如下:
'xadmin',
'crispy_forms'
(6)重新生成數據庫,運行如下:
python manage.py makemigrations
python manage.py migrate
(7)設置成中文,在加載的框架中修改如下內容為:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
(8)創建一個管理員用戶,并且啟動框架就能進入管理界面,操作命令和管理界面如圖4.1所示:
python manage.py createsuperuser
python manage.py runserver
圖4.1 框架后臺管理界面
4.2 模塊添加和注冊
首先在在users下面創建adminx.py,代碼如下:
# users/adminx.pyimport xadminfrom .models import EmailVerifyRecord
#xadmin中這里是繼承object,不再是繼承admin
class EmailVerifyRecordAdmin(object):passxadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)
創建以上管理后,開始進行根據上節django模型設計的分析內容,開始進行各種功能的創建和注冊,以達到最初設計的要求。由于這部分內容比較龐大,在報告中不能一一進行注冊的描述占用篇幅,因此只是對部分代表性的功能模塊進行注冊敘述。
比如將users中Banner也注冊進去,則注冊代碼如下所示:
class BannerAdmin(object):list_display = ['title', 'image', 'url','index', 'add_time']search_fields = ['title', 'image', 'url','index']list_filter = ['title', 'image', 'url','index', 'add_time']xadmin.site.register(Banner,BannerAdmin)
比如說將course注冊進去,則注冊代碼如下所示:
# course/adminx.py
import xadmin
from .models import Course, Lesson, Video, CourseResourceclass CourseAdmin(object): #課程list_display = [ 'name','desc','detail',\
'degree','learn_times','students']search_fields = ['name', 'desc', 'detail',\'degree', 'students']list_filter = [ 'name','desc','detail','degree',\
'learn_times','students']
class LessonAdmin(object): #章節list_display = ['course', 'name', 'add_time']search_fields = ['course', 'name']#這里course__name是根據課程名稱過濾list_filter = ['course__name', 'name', 'add_time']
class VideoAdmin(object): #視頻list_display = ['lesson', 'name', 'add_time']search_fields = ['lesson', 'name']list_filter = ['lesson', 'name', 'add_time']
class CourseResourceAdmin(object): #課程資源list_display = ['course', 'name', 'download', 'add_time']search_fields = ['course', 'name', 'download']list_filter = ['course__name', 'name', 'download', 'add_time']
將管理器與model進行注冊關聯
xadmin.site.register(Course, CourseAdmin)
xadmin.site.register(Lesson, LessonAdmin)
xadmin.site.register(Video, VideoAdmin)
xadmin.site.register(CourseResource, CourseResourceAdmin)
將django模型和第二節模塊功能設計的內容全部按照規則注冊關聯后,則整個項目初步完成,只需要進行后臺管理操作進行增添刪改,補充內容,再進行整體網站的安全檢測就可以上線了,設計完成后的空白后臺
如下圖4.2所示:
圖4.2 注冊完全后的空白后臺
5.內容填充
進行以上設計后,整體建站的設計基本完成,只需要將要發布的內容在管理后臺進行添加發布即可,可對整個網站進行管理。參考mooc網的網上課程的模式,收集一些課程信息在管理后臺進行發布,繼續打造整個網站,最終結果如下圖5.1所示:
圖5.1 發布課程
參考文獻
[1] Django項目實例精解(第2版)作者:[美]安東尼奧米勒 清華大學出版社
[2] Python Web開發實戰 作者:董偉明著 出版社:電子工業出版社
[3] MySQL 5.7從入門到精通(視頻教學版)(第2版)張工廠 清華大學出版社
[4] Python Django Web典型模塊開發實戰 作者:寇雪松 出版社:機械工業出版社