Django後臺管理
目錄
自帶的admin
殺手級功能: 在新建項目時候已經自動生成!
1、創建超級用戶:python manage.py createsuperuser
2、登錄admin系統;
3、配置文件修改:
LANGUAGE_CODE = 'zh-hans' // 修改後臺界面語言為漢字
TIME_ZONE = 'Asia/Shanghai' // 時區設置
USE_TZ = False //
4、註冊表: 進入app下的admin.py
文件:
from .models import UserProfile class UserProfileAdmin(admin.ModelAdmin): pass admin.site.register(UserProfile, UserProfileAdmin)
5、刷新admin頁面即可
XAdmin後臺
繼承自admin.
1、安裝xadmin模塊, 同時也會安裝相關依賴包: pip install xadmin
, 若安裝出現錯誤,很正常!,見安裝xadmin;
2、在setting.py
將xadmin
和crispy_forms
放進INSTALLED_APPS
中;
3、同步xadmin自帶的表: python manage.py migrate
4、修改url.py
import xadmin
urlpatterns = [
url(r'^xadmin/', xadmin.site.urls),
]
PIP安裝XAdmin
可能出現錯誤
Downloading xadmin-0.6.1.tar.gz (1.0MB) 100% |████████████████████████████████| 1.0MB 547kB/s Complete output from command python setup.py egg_info: Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\leo\AppData\Local\Temp\pip-build-thid_cll\xadmin\setup.py", line 11, in <module> long_description=open('README.rst').read(), UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 3444: illegal multibyte sequence ---------------------------------------- Command "python setup.py egg_info" failed with error code 1 in C:\Users\leo\AppData\Local\Temp\pip-build-thid_cll\xadmin\
解決辦法:
README.rst這個文件的編碼有問題,可以內容沒什麽重要的,
1、直接到github上下載安裝包,下載地址:https://github.com/sshwsfc/xadmin
2、然後新建一個txt空文件,把文件名改成README.rst,替換原來的文件下載安裝包,下載zip壓縮文件;
3、直接進入壓縮包所在的目錄安裝: pip install xadmin-master.zip
.
4、安裝若出現錯誤,可能是缺少安裝的依賴包:
# requirement.txt
django-crispy-forms>=1.6.0
django-import-export>=0.5.1
django-reversion>=2.0.0
django-formtools==2.0
future==0.15.2
httplib2==0.9.2
six==1.10.0
源碼安裝Xadmin
由於xadmin源碼是最新版本的,還可以自定義功能,所以推薦源碼安裝
- github下載源碼:
https://github.com/sshwsfc/xadmin
; - 解壓,取出xadmin文件夾,放在項目根目錄;
- 新建
extra_apps
文件夾, 將xadmin文件夾(註意是內部的xadmin文件夾)放進去; - 同樣配置文件設置:
sys.path.insert(1, os.path.join(BASE_DIR, ‘extra_apps‘))
;
Xadmin中App的Model註冊
類似admin的model註冊;
1、每個app下新建adminx.py
(註意文件名不能寫錯)文件,xadmin會默認查詢此文件;
2、寫入以下代碼:
// 修改後刷新頁面即可
import xadmin
from course.models import Course, Chapter, Video, CourseResouces
class CourseAdmin(object): // 繼承object
# 選擇顯示的字段
list_display = ['name', 'mobile', 'course_name']
# 添加字段搜索,篩選功能
search_fields = ['name', 'mobile', 'course_name'] # 某些字段不能加,例如時間
# 界面自帶導出功能, 可以導出多種格式
# 過濾器
list_filter = ['name', 'mobile', 'course_name']
# 按照students_num降序排列,同時也可以在標題欄點擊降序
ordering=['-students_num']
# 自定制圖標顯示
model_icon = 'fa fa-columns'
# 設置只讀字段
readonly_fields = ['name', 'degree', 'learn_times']
# 設置不顯示某些字段
exclude = ['students_num']
# 只要是涉及到此model的外鍵都會顯示查詢,不會出現下拉框,優點是當數據量過大時候,不會加載所有數據
relfield_style = 'fk-ajax'
# 設置在列表頁頁面可編輯的字段
list_editable = ['degree','learn_times']
# 頁面定時刷新,可以在2和4s中選擇,而且還可以取消刷新
refresh_times = [2, 4]
xadmin.site.register(Course, CourseAdmin)
3、註意:user表會自動生成,無須註冊!;
4、若有多個app的話,添加字段需要仔細點!
xadmin用戶信息表配置
# users/adminx.py
from django.contrib import admin
class UserProfileAdmin(admin.ModelAdmin):
list_display = ['username', 'nick_name', 'gender', 'address']
admin.site.register(UserProfile, UserProfileAdmin)
Xadmin常用配置
先選擇一個app下的adminx.py文件, 隨後進行註冊操作.
主題修改
from xadmin import views
class BaseSetting(object):
enable_themes = True
use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSetting)
全局頁頭和頁腳配置
class GlobalSetting(object):
site_title = '學習在線後臺管理系統'
site_footer = '學習在線'
# 折疊左側app菜單
menu_style = "accordion"
xadmin.site.register(views.CommAdminView, GlobalSetting)
修改左側菜單App顯示名稱
// app的目錄下的apps.py
class CourseConfig(AppConfig):
name = 'appname'
verbose_name = '要顯示的名稱'
// app的目錄下的__init__.py
default_app_config = "appname.apps.CourseConfig"
自定制菜單圖標
下載最新版本的font-awesome樣式文件,官網地址:http://fontawesome.dashgame.com/
更新:將下載的css和fonts文件放進\mxonline\extra_apps\xadmin\static\xadmin\vendor\font-awesome\
覆蓋;
在官網查看對應圖標的class值,若不能點擊查看則Ctrl+alt+c
查看;
在對應的adminx.py文件中設置圖標:
class CourseAdmin(object):
model_icon = 'fa fa-columns' # 此處填寫對應的class值即可
更新圖標後若強制刷新無效則重啟即可;
類函數字段顯示
# models.py
class Course():
def get_chap_num(self):
return self.chapter_set.all().count()
# 中文顯示,若沒有定義則只會顯示get_chap_num
get_chap_num.short_description='章節數'
def my_link(self):
from django.utils.safestring import mark_safe
return mark_safe('<a href="https://www.baidu.com">鏈接</a>')
my_link.short_description='章節數'
# adminx.py
class CourseAdmin():
list_display=['get_chap_num','my_link']
最終結果展示
xadmin權限
修改權限失敗:未找出原因!
集成django-ueditor插件步驟
1、安裝:
源碼下載:https://github.com/twz915/DjangoUeditor3,註意此版本兼容python3,優先采用此版本。
在虛擬環境下安裝zip文件:pip install DjangoUeditor-master.zip
,或者將源碼包放在extra_apps文件夾下;
2、settings中添加app:
INSTALLED_APPS = [
'DjangoUeditor',
]
3、配置url:url(r‘^ueditor/‘,include(‘DjangoUeditor.urls‘ ))
4、修改model中需要使用ueditor的字段:
class Course(models.Model):
# 配置ueditor
detail = UEditorField(verbose_name='課程詳情', width=600, height=300, imagePath="courses/ueditor/",
filePath="courses/ueditor/",default='')
5、在xadmin\plugins
文件下新建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 settings
class XadminUEditorWidget(UEditorWidget):
def __init__(self, **kwargs):
self.ueditor_options = kwargs
self.Media.js = None
super(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().widget
param = {}
param.update(widget.ueditor_settings)
param.update(widget.attrs)
return {'widget':XadminUEditorWidget(**param)}
return attrs
def 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\plugins\__init__.py
文件中配置:
PLUGINS = (
'ueditor',
)
7、course/adminx.py
中配置:
class CourseAdmin(object):
#detail就是要顯示為富文本的字段名
style_fields = {"detail": "ueditor"}
8、前端頁面渲染配置:
{% autoescape off %}
{{ course.detail }}
{% endautoescape %}
Django後臺管理