1. 程式人生 > >Django後臺管理

Django後臺管理

class setting util enc block 重要 short require display

目錄

自帶的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.pyxadmincrispy_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源碼是最新版本的,還可以自定義功能,所以推薦源碼安裝

  1. github下載源碼:https://github.com/sshwsfc/xadmin
  2. 解壓,取出xadmin文件夾,放在項目根目錄;
  3. 新建extra_apps文件夾, 將xadmin文件夾(註意是內部的xadmin文件夾)放進去;
  4. 同樣配置文件設置: 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後臺管理