xadmin后台管理
1.xadmin安装
- pip install xadmin
- 源码安装:将源码拷贝到项目中,并安装相应的模块包.
配置xadmin路由:
# urls.py
from django.urls import path
import xadmin
urlpatterns = [
path('xadmin/', xadmin.site.urls),
]
注册app
把下面两个app注册到settings.py的INSTALLED_APPS中
#setting.py
'xadmin',
'crispy_forms'
生成xadmin的表
python manage.py makemigrations
python manage.py migrate
设置成中文
#setting.py
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
models注册 在后台添加对model的管理
- 在app下创建adminx
- 导入模块,创建xadmin管理器类
- 将管理器与model进行注册关联.
# 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) #注册
xadmin后台管理全局配置
将全局配置修改:
- 如左上角:django Xadmin。下面的我的公司
- 主题修改,app名称汉化,菜单收叠。
- 使用Xadmin的主题功能。
把全站的配置放在users\adminx.py中:
1. 添加主题功能
from xadmin import views
# 创建xadmin的最基本管理器配置,并与view绑定
class BaseSetting(object):
# 开启主题功能
enable_themes = True
use_bootswatch = True
# 将基本配置管理与view绑定
xadmin.site.register(views.BaseAdminView,BaseSetting)
2.全局配置
修改django admin 和下面的我的公司收起菜单
# 全局修改,固定写法
class GlobalSettings(object):
# 修改title
site_title = '后台管理界面'
# 修改footer
site_footer = '公司'
# 收起菜单
menu_style = 'accordion' #菜单风格:可折叠的
# 将title和footer信息进行注册
xadmin.site.register(views.CommAdminView,GlobalSettings)
修改之后,如图所示:
修改app的名字
以users/apps.py为例
将user/apps.py代码替换为:
#users/apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
verbose_name = '用户'
还要在users/__init__.py中引用apps.py的配置
添加代码如下:
# users/__init__.py
default_app_config = 'users.apps.UsersConfig'
其它三个app类似.
xadmin进阶开发设置:
用户权限
- 超级用户拥有所有权限,
- 职员用户可以登入后台,但是权限需要被超级用户设置.
- 其他用户不能登入后台
组的权限
- 添加一个组“编辑部门”,组是许多权限的集合,方便给相同职员添加权限
- 组里面的成员不但拥有自己本身的权限外,还会拥有组的权限
默认排序、只读字段和不显示的字段
课程:
- 按点击数倒序排序
- 点击数不能编辑
- 不显示收藏人数
#eg:
# 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'] #不显示字段
list_editable:在列表页可以直接编辑的
class CourseAdmin(object):
list_editable = ['degree','desc']
refresh定时刷新工具
course/adminx.py中
class CourseAdmin(object):
refresh_times = [3,5] #自动刷新(里面是秒数)
后台效果:
可以选择3s或者5s自动刷新页面
增加富文本编辑器Ueditor
1.下载
地址:https://github.com/twz915/DjangoUeditor3/
解压后,把DjangoUeditor文件夹拷贝到项目目录下面
注意:直接pip install DjangoUeditor的方法会出问题
2.settings中INSTALLED_APPS插入app
INSTALLED_APPS = [
'DjangoUeditor',
]
3.配置url
#mkw_learn/urls.py
# 富文本编辑器url
path('ueditor/',include('DjangoUeditor.urls' )),
4.给model的detail字段设置UEditorField富文本编辑属性
#course/models.py
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 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/plugs/__init__.py里面添加ueditor插件
PLUGINS = (
'ueditor',
)
7.xadmin.py后台富文本编辑字段设置
class CourseAdmin(object):
#detail就是要显示为富文本的字段名
style_fields = {"detail": "ueditor"}
8.模板中设置,django为了防止csrf攻击,对传过来的数据进行了转义,这里需要关闭转义.模板中关闭转义设置如下:
<div class="tab_cont tab_cont1">
{% autoescape off %} #
{{ course.detail }}
{% endautoescape %}
</div>
最终效果:后台编辑页面
前端显示