1. 程式人生 > >Django+xadmin打造線上教育平臺(二)

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下載 五、用戶註冊 主要實現功能 用戶輸入郵箱、密碼和驗證碼,點註冊按鈕 如果輸入的不正確,提示錯誤信息 如果正確,發