Django+xadmin打造線上教育平臺(二)
目錄
程式碼
三、xadmin後臺管理
3.1.xadmin的安裝
django2.0的安裝(原始碼安裝方式):
https://github.com/sshwsfc/xadmin/tree/django2
把zip檔案放到pip目錄下,執行下面命令安裝:
pip install xadmin-django2
是檔案README.rst 出現了 Unicode 解碼錯誤,這個檔案是沒有什麼用處的,可以新建一個同名的空白檔案替換掉 首先下載zip原始碼包:github.com/sshwsfc/xadmin 解壓後,開啟README.rst檔案,清空裡面的內容,然後儲存。 再壓縮成zip,放到pip目錄下:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site其它版本-packages\pip 此時開啟cmd進行安裝:pip install xadmin-master.zip
如果上面安裝提示Runtime錯誤:
更換安裝源(使用豆瓣源)
pip install -i https://pypi.douban.com/simple xadmin-django2
安裝成功後,同時也安裝了很多依賴的包。
3.2.xadmin的設定
(1)新建Python Package "extra_apps",把原始碼xadmin資料夾放到extra_apps資料夾下面,此時目錄結構如下:
(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)建立一個管理員使用者
python manage.py createsuperuser
現在就可以運行了
python manage.py runserver
訪問後臺:http://127.0.0.1:8000/xadmin
可以看到成功進入管理介面
datetimefield報錯問題解決:
當我們點增加使用者資訊,會報錯
可以看到報的是xadmin/widgets中第80行
def render(self, name, value, attrs=None): input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('\n') if ht != ''] # return input_html return mark_safe('<div class="datetime clearfix"><div class="input-group date bootstrap-datepicker"><span class="input-group-addon"><i class="fa fa-calendar"></i></span>%s' '<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div>' '<div class="input-group time bootstrap-clockpicker"><span class="input-group-addon"><i class="fa fa-clock-o">' '</i></span>%s<span class="input-group-btn"><button class="btn btn-default" type="button">%s</button></span></div></div>' % (input_html[0], _(u'Today'), input_html[1], _(u'Now')))
上面貼出來的最後一行程式碼就是widgets.py的第80行程式碼。
可以看出這句程式碼是希望用“\n”把input_html裡的兩個標籤拆開,但兩個標籤之間沒有換行,所以沒能拆分,導致報錯。
input_html[1]就是報錯的程式碼,因為input_html裡只有一個元素。
解決辦法:
既然“\n”不能拆分標籤,那麼就換一種拆分方式,使用“/><”拆分。
原始碼:
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('\n') if ht != '']
修改後程式碼:
input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/><') if ht != ''] input_html[0] = input_html[0] + "/>" input_html[1] = "<" + input_html[1]
再執行就正常了
3.3.users app的models註冊
(1)在users下面建立adminx.py,程式碼如下:
# users/adminx.py import xadmin from .models import EmailVerifyRecord #xadmin中這裡是繼承object,不再是繼承admin class EmailVerifyRecordAdmin(object): pass xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)
(2)完善功能,增加顯示欄位,搜尋和過濾
修改users/adminx.py,程式碼如下:
# users/adminx.py import xadmin from .models import EmailVerifyRecord #xadmin中這裡是繼承object,不再是繼承admin class EmailVerifyRecordAdmin(object): # 顯示的列 list_display = ['code', 'email', 'send_type', 'send_time'] # 搜尋的欄位,不要新增時間搜尋 search_fields = ['code', 'email', 'send_type'] # 過濾 list_filter = ['code', 'email', 'send_type', 'send_time'] xadmin.site.register(EmailVerifyRecord,EmailVerifyRecordAdmin)
重新整理後的介面:
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)
3.4.剩餘app model註冊
(1)course
程式碼如下: 注意外來鍵
# course/adminx.py import xadmin from .models import Course, Lesson, Video, CourseResource
class 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)
(2)organizations
程式碼如下:
# organization/adminx.py import xadmin from .models import CityDict, CourseOrg, Teacher class CityDictAdmin(object): '''城市''' list_display = ['name', 'desc', 'add_time'] search_fields = ['name', 'desc'] list_filter = ['name', 'desc', 'add_time'] class CourseOrgAdmin(object): '''機構''' list_display = ['name', 'desc', 'click_nums', 'fav_nums','add_time' ] search_fields = ['name', 'desc', 'click_nums', 'fav_nums'] list_filter = ['name', 'desc', 'click_nums', 'fav_nums','city__name','address','add_time'] class TeacherAdmin(object): '''老師''' list_display = [ 'name','org', 'work_years', 'work_company','add_time'] search_fields = ['org', 'name', 'work_years', 'work_company'] list_filter = ['org__name', 'name', 'work_years', 'work_company','click_nums', 'fav_nums', 'add_time'] xadmin.site.register(CityDict, CityDictAdmin) xadmin.site.register(CourseOrg, CourseOrgAdmin) xadmin.site.register(Teacher, TeacherAdmin)
(3)operation
程式碼如下:
# operation/adminx.py import xadmin from .models import UserAsk, UserCourse, UserMessage, CourseComments, UserFavorite class UserAskAdmin(object): '''使用者表單我要學習''' list_display = ['name', 'mobile', 'course_name', 'add_time'] search_fields = ['name', 'mobile', 'course_name'] list_filter = ['name', 'mobile', 'course_name', 'add_time'] # class UserCourseAdmin(object): '''使用者課程學習''' list_display = ['user', 'course', 'add_time'] search_fields = ['user', 'course'] list_filter = ['user', 'course', 'add_time'] class UserMessageAdmin(object): '''使用者訊息後臺''' list_display = ['user', 'message', 'has_read', 'add_time'] search_fields = ['user', 'message', 'has_read'] list_filter = ['user', 'message', 'has_read', 'add_time'] class CourseCommentsAdmin(object): '''使用者評論後臺''' list_display = ['user', 'course', 'comments', 'add_time'] search_fields = ['user', 'course', 'comments'] list_filter = ['user', 'course', 'comments', 'add_time'] class UserFavoriteAdmin(object): '''使用者收藏後臺''' list_display = ['user', 'fav_id', 'fav_type', 'add_time'] search_fields = ['user', 'fav_id', 'fav_type'] list_filter = ['user', 'fav_id', 'fav_type', 'add_time'] # 將後臺管理器與models進行關聯註冊。 xadmin.site.register(UserAsk, UserAskAdmin) xadmin.site.register(UserCourse, UserCourseAdmin) xadmin.site.register(UserMessage, UserMessageAdmin) xadmin.site.register(CourseComments, CourseCommentsAdmin) xadmin.site.register(UserFavorite, UserFavoriteAdmin)
全部程式碼:
# users/adminx.py import xadmin from .models import EmailVerifyRecord,Banner #xadmin中這裡是繼承object,不再是繼承admin class EmailVerifyRecordAdmin(object): # 顯示的列 list_display = ['code', 'email', 'send_type', 'send_time'] # 搜尋的欄位 search_fields = ['code', 'email', 'send_type'] # 過濾 list_filter = ['code', 'email', 'send_type', 'send_time'] 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(EmailVerifyRecord,EmailVerifyRecordAdmin) xadmin.site.register(Banner,BannerAdmin)users/adminx.py
# course/adminx.py import xadmin from .models import Course, Lesson, Video, CourseResource # Course的admin管理器 class 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)course/adminx.py
# organization/adminx.py import xadmin from .models import CityDict, CourseOrg, Teacher class CityDictAdmin(object): '''城市''' list_display = ['name', 'desc', 'add_time'] search_fields = ['name', 'desc'] list_filter = ['name', 'desc', 'add_time'] class CourseOrgAdmin(object): '''機構''' list_display = ['name', 'desc', 'click_nums', 'fav_nums','add_time' ] search_fields = ['name', 'desc', 'click_nums', 'fav_nums'] list_filter = ['name', 'desc', 'click_nums', 'fav_nums','city__name','address','add_time'] class TeacherAdmin(object): '''老師''' list_display = [ 'name','org', 'work_years', 'work_company','add_time'] search_fields = ['org', 'name', 'work_years', 'work_company'] list_filter = ['org__name', 'name', 'work_years', 'work_company','click_nums', 'fav_nums', 'add_time'] xadmin.site.register(CityDict, CityDictAdmin) xadmin.site.register(CourseOrg, CourseOrgAdmin) xadmin.site.register(Teacher, TeacherAdmin)organization/adminx.py
# operation/adminx.py import xadmin from .models import UserAsk, UserCourse, UserMessage, CourseComments, UserFavorite class UserAskAdmin(object): '''使用者表單我要學習''' list_display = ['name', 'mobile', 'course_name', 'add_time'] search_fields = ['name', 'mobile', 'course_name'] list_filter = ['name', 'mobile', 'course_name', 'add_time'] # class UserCourseAdmin(object): '''使用者課程學習''' list_display = [相關推薦
Django+xadmin打造線上教育平臺(二)
目錄 程式碼 線上演示 三、xadmin後臺管理 3.1.xadmin的安裝 django2.0的安裝(原始碼安裝方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip檔案放到pip目錄下,執行下面命令安裝
Django+xadmin打造線上教育平臺(一)
目錄 程式碼 線上演示 一、前言 開發環境: python: 3.6.4 Django: 2.0.2 後臺管理:xadmin 1.1.專案介紹 系統概括: 系統具有完整的使用者登入註冊以及找回密碼功能,擁有完整個人中心。 個人中心: 修改頭
Django+xadmin打造線上教育平臺(十)
目錄 程式碼 十四、xadmin的進階開發 14.1.許可權管理 (1)使用者許可權 超級使用者擁有所有許可權,其它新增的使用者預設沒有任何許可權 進後臺新增一個使用者“Editor1”,勾上“職員狀態”後,這個使用者才可以登入進後臺,預設沒新增許可權的使用者登入到後臺的情
Django+xadmin打造線上教育平臺(六)
目錄 程式碼 九、課程章節資訊 9.1.模板和urls 拷貝course-comments.html 和 course-video.html放入 templates目錄下 先改course-video.html,同樣繼承base.html,然後裡面有屬於自己的樣式,也要保留
Django+xadmin打造線上教育平臺(八)
目錄 程式碼 十一、使用者資訊 11.1.個人資訊展示 (1)新建‘usercenter-bae.html’當母板 {% load staticfiles %} <!DOCTYPE html> <html> <head&g
Django+xadmin打造線上教育平臺(七)
目錄 程式碼 十、授課教師 10.1.講師列表頁 拷貝teacher-list.html和teacher-detail.html到templates目錄下 先改teacher-list.html,同樣繼承base.html (1)urls配置 organaz
Django+xadmin打造線上教育平臺(三)
目錄 程式碼 五、使用者註冊 主要實現功能 使用者輸入郵箱、密碼和驗證碼,點註冊按鈕 如果輸入的不正確,提示錯誤資訊 如果正確,傳送啟用郵件,使用者通過郵件啟用後才能登陸 即使註冊成功,沒有啟用的使用者也不能登陸 5.1.初步檢視
Django+xadmin打造線上教育平臺(九)
目錄 程式碼 十二、首頁和全域性404,500配置 12.1.首頁功能 Course新增一個欄位 is_banner = models.BooleanField('是否輪播',default=False) CourseOrg新增一個欄位 tag = model
Django+xadmin打造線上教育平臺(五)
目錄 程式碼 八、課程詳情頁功能的實現 8.1.課程列表 (1)配置urls MxOnline/urls中 path("course/", include('course.urls', namespace="course")), course裡面新建urls.p
Django+xadmin打造線上教育平臺(四)
目錄 程式碼 七、授課機構功能 7.1.模板繼承 (1)建立母板 把org-list.html拷貝到templates目錄下,新建base.html,剪下org-list.html內容到裡面 再修改一下靜態檔案的地址(css、就是、image和media) (2)
django+xadmin在線教育平臺(二)
cti .com config Django項目 django 官方下載 不能 ima 相關 老話總是沒錯的,工欲善其事,必先利其器 教你安裝pycharm,mysql,navicat,python相關環境。 windows下搭建開發環境 2-1 pycharm,mys
慕課網學習python+Django+xadmin打造線上教育平臺user app學習總結
學習django這個框架也有一段時間了,一開始接觸到這個框架就對這個框架非常的感興趣,所以就去學習了慕課網上的python升級3.6強力Django+殺手級打造線上教育平臺,目前學習完了六個章節,實現了使用者登入,使用者註冊,找回密碼功能,覺得有必要先總結總結之前的學習,然後
django+xadmin在線教育平臺(四)
app 數據庫名 左右 sqlite3 pyc win data- navi 前置 3-2 配置表單頁面 必要的該說的,該了解的 前置條件: 你已經學習了前面教程。將項目的文件夾目錄結構,setting配置等修改完畢與我保持一致。 本節通過Django快速的配置一個
django+xadmin在線教育平臺(七)
fine 定義 頭像 sta http origin upload ack naconda 4-3 新建項目 Python2.7 創建虛擬環境。 mkvirtualenv mxonline2 安裝django pip install django==1.9.8 註
Python升級3.6 強力Django+殺手級Xadmin打造線上教育平臺 收藏 P
前往下載 第1章 課程介紹 介紹課程目標、通過課程能學習到的內容、和系統開發前需要具備的知識 1-1 專案演示和課程介紹 第2章 windows下搭建開發環境 介紹專案開發需要安裝的開發軟體、 python虛擬virtualenv和 virtualen
Python升級3.6 強力Django+殺手級Xadmin打造線上教育平臺
第1章 課程介紹介紹課程目標、通過課程能學習到的內容、和系統開發前需要具備的知識第2章 windows下搭建開發環境介紹專案開發需要安裝的開發軟體、 python虛擬virtualenv和 virtualenvwrapper的安裝和使用、 最後介紹pycharm和navica
django+xadmin在線教育平臺(十七)
在線 __date__ 書寫 favor 自己 agen cli 相同 ted 8-1 課程列表 拷貝課程列表頁到template目錄 創建課程相關的urls.py Mxonline2/urls.py中聲明包含到course的url中: # 課程app的url配置
(專案)線上教育平臺(五)
七、找回密碼功能 1、找回密碼頁面配置 將找回密碼頁面forgetpwd.html前端檔案拷貝到專案的templates資料夾內。 然後修改註冊頁面register.html初始檔案中的靜態檔案訪問路徑,修改成{% static '靜態檔案路徑' %}的形式。 2、後端找回密碼介面 2.1
Django+xadmin打造在線教育平臺(四)
技術 hot dfa index lin height 東方 邏輯 then Django+xadmin打造在線教育平臺(四) 代碼 github下載 七、授課機構功能 7.1.模板繼承 (1)創建母板 把org-list.html拷貝到templates目錄下,新
Django+xadmin打造在線教育平臺(三)
cor 靜態 實現 span xadmin 下載 註冊頁面 用戶名 alt Django+xadmin打造在線教育平臺(三) 代碼 github下載 五、用戶註冊 主要實現功能 用戶輸入郵箱、密碼和驗證碼,點註冊按鈕 如果輸入的不正確,提示錯誤信息 如果正確,發