Django后台管理

Posted fqh202

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.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:UsersleoAppDataLocalTemppip-build-thid_cllxadminsetup.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:UsersleoAppDataLocalTemppip-build-thid_cllxadmin

解决办法
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文件放进mxonlineextra_appsxadminstaticxadminvendorfont-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、在xadminplugins文件下新建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、在xadminplugins\__init__.py文件中配置:

PLUGINS = (
   'ueditor',
)

7、course/adminx.py中配置:

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

8、前端页面渲染配置:

{% autoescape off %}
{{ course.detail }}
{% endautoescape %}

以上是关于Django后台管理的主要内容,如果未能解决你的问题,请参考以下文章

Django2.1.2创建默认管理后台

网站开发(周四):项目后台数据管理(实战)

django 框架学习:十六.django 后台管理系统

08-Django-基础篇-admin管理后台

Django后台管理系统

Django开发博客系统(07-根据需求定制管理后台)