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.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: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源码是最新版本的,还可以自定义功能,所以推荐源码安装
- 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文件放进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后台管理的主要内容,如果未能解决你的问题,请参考以下文章