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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Django+xadmin打造在线教育平台(十)

發布時間:2025/6/16 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django+xadmin打造在线教育平台(十) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

在線教育平臺(一)? ? ??在線教育平臺(二)

在線教育平臺(三)? ? ??在線教育平臺(四)

在線教育平臺(五)? ? ??在線教育平臺(六)

在線教育平臺(七)? ? ??在線教育平臺(八)

在線教育平臺(九)? ? ??在線教育平臺(十)

代碼

github下載

十四、xadmin的進階開發

14.1.權限管理

(1)用戶權限

超級用戶擁有所有權限,其它添加的用戶默認沒有任何權限

進后臺添加一個用戶“Editor1”,勾上“職員狀態”后,這個用戶才可以登錄進后臺,默認沒添加權限的用戶登錄到后臺的情況如下:

接下來,為用戶Editor1添加查看課程和查看章節的權限

?

?再刷新可以看到,有了查看課程和章節的權限了

?

?(2)組的權限

?添加一個組“編輯部門”,賦予如下權限?:

?把剛才的用戶“Editor1”加入到“編輯部門”這個組,然后看用戶現在的權限如下:

?

組里面的成員不但擁有自己本身的權限外,還會擁有組的權限

?

14.2.自定義icon

?xadmin的圖標采用的是第三方css樣式“font awesome”,我們可以進官網下載最新的樣式替代原本的,下載地址:http://www.fontawesome.com.cn/

下載完后把里面的“css”和“fonts”兩個文件夾拷貝到xadmin的源碼(路徑:xadmin/static/vendor/font-awesome)里面

?

使用方法:

以course為例

(1)進官網找到圖標的樣式

(2)course/adminx.py使用

# 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']model_icon = 'fa fa-book'

再在后臺刷新(ctrl+F5),就可以看到圖標了

?

14.3.默認排序、只讀字段和不顯示的字段

課程:

  • 按點擊數倒序排序
  • 點擊數不能編輯
  • 不顯示收藏人數
# 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'] #過濾 model_icon = 'fa fa-book' #圖標ordering = ['-click_nums'] #排序readonly_fields = ['click_nums'] #只讀字段,不能編輯exclude = ['fav_nums'] #不顯示的字段

?

14.4.inlines添加數據

?目前在添加課程的時候沒法添加章節和課程資源,我們可以用inlines去實現這一功能

class LessonInline(object):model = Lessonextra = 0class CourseResourceInline(object):model = CourseResourceextra = 0#在CourseAdmin中使用inlines添加上面兩個的方法 class CourseAdmin(object):inlines = [LessonInline,CourseResourceInline] #增加章節和課程資源

效果如下:

再添加課程的時候,可以直接添加章節和課程資源

?

?

14.5.一張表分兩個Model來管理

課程里面分為輪播課程和不是輪播課程兩種類型,我們可以分開來管理

(1)在course/models.py里面新建一個Model

class BannerCourse(Course):'''顯示輪播課程'''class Meta:verbose_name = '輪播課程'verbose_name_plural = verbose_name#這里必須設置proxy=True,這樣就不會再生成一張表,同時還具有Model的功能proxy = True

(2)course/adminx.py

from .models import BannerCourseclass 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'] #過濾model_icon = 'fa fa-book' #圖標ordering = ['-click_nums'] #排序readonly_fields = ['click_nums'] #只讀字段exclude = ['fav_nums'] #不顯示的字段inlines = [LessonInline,CourseResourceInline] #增加章節和課程資源def queryset(self):# 重載queryset方法,來過濾出我們想要的數據的qs = super(CourseAdmin, self).queryset()# 只顯示is_banner=True的課程qs = qs.filter(is_banner=False)return qsclass BannerCourseAdmin(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']model_icon = 'fa fa-book'ordering = ['-click_nums']readonly_fields = ['click_nums']exclude = ['fav_nums']inlines = [LessonInline,CourseResourceInline]def queryset(self):#重載queryset方法,來過濾出我們想要的數據的qs = super(BannerCourseAdmin, self).queryset()#只顯示is_banner=True的課程qs = qs.filter(is_banner=True)return qs# 將管理器與model進行注冊關聯 xadmin.site.register(Course, CourseAdmin) xadmin.site.register(BannerCourse, BannerCourseAdmin)

?

后臺:可以看到多了一個輪播課程,來達到分類管理的一個功能

?

?

?

14.6.xadmin的其它常見功能

(1)list_editable

在列表頁可以直接編輯的

class CourseAdmin(object):list_editable = ['degree','desc']

?

?(2)自定義函數作為列顯示

course/models.py中

class Course(models.Model):' ' ' def get_zj_nums(self):#獲取課程的章節數return self.lesson_set.all().count()get_zj_nums.short_description = '章節數' #在后臺顯示的名稱

course/adminx.py中

class CourseAdmin(object):list_display = ['get_zj_nums'] #直接使用函數名作為字段顯示

效果:列表字段多了個“章節數”

?

(3)顯示自定義的html代碼

course/models.py中

class Course(models.Model):...def go_to(self):from django.utils.safestring import mark_safe#mark_safe后就不會轉義return mark_safe("<a href='https://home.cnblogs.com/u/derek1184405959/'>跳轉</a>")go_to.short_description = "跳轉"

course/adminx.py中

class CourseAdmin(object):list_display = ['go_to']

效果:多了一個列表“跳轉”,點擊后跳轉到上面定義的地址

?

(4)refresh定時刷新工具

?course/adminx.py中

class CourseAdmin(object):refresh_times = [3,5] #自動刷新(里面是秒數)

后臺效果:

可以選擇3s或者5s自動刷新頁面

?

(5)字段聯動

?應用場景:當添加一門課程的時候,希望課程機構里面的課程數 +1

?重寫xadmin的save_models方法

class CourseAdmin(object):...def save_models(self):# 在保存課程的時候統計課程機構的課程數# obj實際是一個course對象obj = self.new_obj# 如果這里不保存,新增課程,統計的課程數會少一個 obj.save()# 確定課程的課程機構存在。if obj.course_org is not None:#找到添加的課程的課程機構course_org = obj.course_org#課程機構的課程數量等于添加課程后的數量course_org.course_nums = Course.objects.filter(course_org=course_org).count()course_org.save() # course/adminx.pyimport xadminfrom .models import Course, Lesson, Video, CourseResource,BannerCourse from organization.models import CourseOrgclass LessonInline(object):model = Lessonextra = 0class CourseResourceInline(object):model = CourseResourceextra = 0# Course的admin管理器 class CourseAdmin(object):'''課程'''list_display = [ 'name','desc','detail','degree','learn_times','students','get_zj_nums','go_to'] #顯示的字段search_fields = ['name', 'desc', 'detail', 'degree', 'students'] #搜索list_filter = [ 'name','desc','detail','degree','learn_times','students'] #過濾model_icon = 'fa fa-book' #圖標ordering = ['-click_nums'] #排序readonly_fields = ['click_nums'] #只讀字段exclude = ['fav_nums'] #不顯示的字段list_editable = ['degree','desc']# refresh_times = [3,5] #自動刷新(里面是秒數范圍)inlines = [LessonInline,CourseResourceInline] #增加章節和課程資源def queryset(self):# 重載queryset方法,來過濾出我們想要的數據的qs = super(CourseAdmin, self).queryset()# 只顯示is_banner=True的課程qs = qs.filter(is_banner=False)return qsdef save_models(self):# 在保存課程的時候統計課程機構的課程數# obj實際是一個course對象obj = self.new_obj# 如果這里不保存,新增課程,統計的課程數會少一個 obj.save()# 確定課程的課程機構存在。if obj.course_org is not None:#找到添加的課程的課程機構course_org = obj.course_org#課程機構的課程數量等于添加課程后的數量course_org.course_nums = Course.objects.filter(course_org=course_org).count()course_org.save()class BannerCourseAdmin(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']model_icon = 'fa fa-book'ordering = ['-click_nums']readonly_fields = ['click_nums']exclude = ['fav_nums']inlines = [LessonInline,CourseResourceInline]def queryset(self):#重載queryset方法,來過濾出我們想要的數據的qs = super(BannerCourseAdmin, self).queryset()#只顯示is_banner=True的課程qs = qs.filter(is_banner=True)return qsclass 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(BannerCourse, BannerCourseAdmin) xadmin.site.register(Lesson, LessonAdmin) xadmin.site.register(Video, VideoAdmin) xadmin.site.register(CourseResource, CourseResourceAdmin) course/adminx.py全部代碼

?

14.7.增加富文本編輯器Ueditor

(1)下載

地址:https://github.com/twz915/DjangoUeditor3/

解壓后,把DjangoUeditor文件夾拷貝到項目目錄下面

注意:直接pip install DjangoUeditor的方法會出問題

(2)settings中添加app

INSTALLED_APPS = ['DjangoUeditor', ]

(3)MxOnline/urls.py

  # 富文本編輯器urlpath('ueditor/',include('DjangoUeditor.urls' )),

?(4)course/models.py中Course修改detail字段

class Course(models.Model):# detail = models.TextField("課程詳情")detail = UEditorField(verbose_name=u'課程詳情', width=600, height=300, imagePath="courses/ueditor/",filePath="courses/ueditor/", default='')

(5)xadmin/plugs目錄下新建ueditor.py文件,代碼如下

import xadmin from xadmin.views import BaseAdminPlugin, CreateAdminView, ModelFormAdminView, UpdateAdminView from DjangoUeditor.models import UEditorField from DjangoUeditor.widgets import UEditorWidget from django.conf import settingsclass XadminUEditorWidget(UEditorWidget):def __init__(self, **kwargs):self.ueditor_options = kwargsself.Media.js = Nonesuper(XadminUEditorWidget,self).__init__(kwargs)class UeditorPlugin(BaseAdminPlugin):def get_field_style(self, attrs, db_field, style, **kwargs):if style == 'ueditor':if isinstance(db_field, UEditorField):widget = db_field.formfield().widgetparam = {}param.update(widget.ueditor_settings)param.update(widget.attrs)return {'widget':XadminUEditorWidget(**param)}return attrsdef block_extrahead(self, context, nodes):js = '<script type="text/javascript" src="%s"></script>' %(settings.STATIC_URL + "ueditor/ueditor.config.js")js += '<script type="text/javascript" src="%s"></script>' %(settings.STATIC_URL + "ueditor/ueditor.all.min.js")nodes.append(js)xadmin.site.register_plugin(UeditorPlugin, UpdateAdminView) xadmin.site.register_plugin(UeditorPlugin, CreateAdminView)

(6)xadmin/plugs/__init__.py里面添加ueditor插件

PLUGINS = ('ueditor', )

(7)course/adminx.py中使用

class CourseAdmin(object):#detail就是要顯示為富文本的字段名style_fields = {"detail": "ueditor"}

(8)course-detail.html

在模板中必須關閉Django的自動轉義才能正常顯示

<div class="tab_cont tab_cont1">{% autoescape off %}{{ course.detail }}{% endautoescape %}</div>

最終效果:

后臺編輯頁面

?

?前端顯示

?

?

?

?

總結

以上是生活随笔為你收集整理的Django+xadmin打造在线教育平台(十)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。