Xadmin使用教程
前言:
直接替代Django自带的站点管理(admin),并带来了很多实用的东西,完全可扩展的插件支持,基于Twitter Bootstrap的漂亮UI。
Python版本:3.6.8
django-import-export版本:1.2.0
Xadmin版本:0.6.1
- 完全替代Django admin
- 支持基于Twitter Bootstrap的UI主题
- 支持可扩展的插件
- 更好的过滤器,日期范围,数量范围等
- 内置xls,csv,xml和json格式数据导出
- 具有窗口小部件支持的仪表板页面
- 现场书签
- 完整的CRUD方法
-
最好通过PyPI安装Xadmin。要安装最新版本,请运行:
1
pip install xadmin
-
或从github来源安装:(如果第一种方式安装失败,建议使用该方法安装)
1
pip install git+git://github.com/sshwsfc/xadmin.git
-
从Django 2.0的github源安装:
1
pip install git+git://github.com/sshwsfc/xadmin.git@django2
-
注意事项:
- 如果第一种方式安装失败则尝试第二种方式(如果第一种方式已安装
xadmin
记得先卸载再尝试第二种方式) - 如果使用第二种方式安装出现
django-import-export
版本错误,则卸载掉已安装的django-import-export
和xadmin
,然后去django-import-export
官网查看适合自己的版本再单独安装django-import-export
,最后再使用第二种方法安装Xadmin
- 通过githup上搜索xadmin,直接下载源码包,只需把下载文件中的xadmin文件夹拷贝到项目根目录配置便可以使用,当然得把pip安装得xadmin卸载后使用的才是导入的源码包
pip uninstall xadmin
(推荐,当xadmin的新功能还没有发布到pypi上时,可以优先使用,当然,最主要的是我们可以查看源码,更加容易理解xadmin的功能,并在不断学习中进步)
- 如果第一种方式安装失败则尝试第二种方式(如果第一种方式已安装
-
激活应用
1
2
3
4
5
6
7
8
9
10
11
12INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myApp.apps.MyappConfig',
'xadmin',
'crispy_forms',
'reversion',
] -
主路由配置
1
2
3
4
5
6
7
8
9from django.conf.urls import url, include
from django.contrib import admin
import xadmin
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^xadmin/', xadmin.site.urls),
url(r'^', include('myApp.urls', namespace='sunck')),
] -
迁移文件
1
2python manage.py makemigrations
python manage.py migrate -
创建管理员用户
1
python manage.py createsuperuser
按顺序输入用户名、邮箱、密码
-
登录
-
启动服务
1
python manage.py runserver
-
在浏览器地址栏输入
1
http://127.0.0.1:8000/admin
-
输入账号和密码登录
-
-
配置中文显示
1
2
3LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'修改 settings.py 文件
-
管理表数据
-
将要管理的表添加到应用目录下的 admin.py文件中进行注册
1
2
3
4
5
6
7import xadmin
# 引入要管理的模型类
from myApp.models import Student, Grade
# Register your models here.
xadmin.site.register(Student)
xadmin.site.register(Grade)
-
-
自定义管理界面
-
属性说明
list_display
:显示字段,可以点击进行排序,属性排列顺序list_filter
:过滤字段,过滤框出现在页面右侧search_fields
:搜索字段,搜索框会出现在列表上方list_per_page
:分页显示,确定每页有多少条数据actions_on_top
:执行动作框是否显示在上方actions_on_bottom
:执行动作框是否显示在下方model_icon
:相应表图标配置,https://fontawesome.com/iconsshow_detail_fields
:显示详情refresh_times
:数据刷新时间1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# Register your models here.
class StudentAdmin(object):
# 列表页属性
list_display = ['pk', 'name', 'age', 'sex', 'grade', 'content', 'isDelete']
list_filter = ["grade", "age"]
search_fields = ["name"]
list_per_page = 10
# 相应表图标配置
# https://fontawesome.com/icons
model_icon = 'fa fa-address-book'
# 显示详情
show_detail_fields = ['name']
# 数据刷新时间
refresh_times = (3, 5)
# 执行动作框的位置
actions_on_top = False
actions_on_bottom = True
xadmin.site.register(Student, StudentAdmin)
-
全局设置
site_title
:后台名称(左上角名称)site_footer
:页脚设置menu_style
:左侧栏折叠样式1
2
3
4
5
6
7
8
9
10
11class GlobalSetting(object):
# 页头
site_title = '学生班级管理系统'
# 页脚
site_footer = 'By苏寅'
# 左侧栏折叠样式
menu_style = 'accordion'
# 设置models的全局图标
xadmin.site.register(views.BaseAdminView, BaseSetting)
-
主题配置
-
注册与表注册不同,需要将类和views.BaseAdminView绑定,且顺序与表相反
1
2
3
4
5
6
7
8
9class BaseSetting(object):
'''
主题样式多样化
'''
enable_themes = True
use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSetting)
-
-
表名设置
-
注册在后台的表名为
verbose_name
(数据只有一条,即单数),否则为verbose_name_plural
(数据大于一条,即为复数),若为指明verbose_name_plural
,则复数形式默认在单数形式后面在s(学校s),进入详情页的标签则为models中的verbose_name
-
models中重载
__str__()
函数返回的值是在每张表详情列表页的展示的标签名,可以在显示列中指定1
2
3
4
5
6
7
8
9
10
11
12
13class Grade(models.Model):
name = models.CharField(max_length=20)
boyNum = models.IntegerField()
girlNum = models.IntegerField()
isDelete = models.BooleanField(default=False)
def __str__(self):
return self.name
class Meta:
db_table = "grades"
verbose_name = '班级'
verbose_name_plural = verbose_name
-
-
app名称设置
-
只需修改每个app下的
apps.py
文件,在config类中加上verbose_name=xxx
,然后在对应__init__.py
文件中加上default_app_config='对应config路径'
1
2
3
4
5
6from django.apps import AppConfig
class MyappConfig(AppConfig):
name = 'myApp'
verbose_name = '学生管理'应用目录下的
apps.py
1
default_app_config = 'myApp.apps.MyappConfig'
应用目录下的
__init__.py
-
-
-
配置示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59import xadmin
# 引入要管理的模型类
from myApp.models import Student, Grade
from xadmin import views
# Register your models here.
class StudentAdmin(object):
# 列表页属性
list_display = ['pk', 'name', 'age', 'sex', 'grade', 'content', 'isDelete']
list_filter = ["grade", "age"]
search_fields = ["name"]
list_per_page = 10
# 相应表图标配置
# https://fontawesome.com/icons
model_icon = 'fa fa-address-book'
# 显示详情
show_detail_fields = ['name']
# 数据刷新时间
refresh_times = (3, 5)
# 执行动作框的位置
actions_on_top = False
actions_on_bottom = True
class GradeAdmin(object):
list_display = ["pk", "name", "boyNum", "girlNum", "isDelete"]
list_filter = ["name"]
search_fields = ["name"]
list_per_page = 10
class BaseSetting(object):
'''
主题样式多样化
'''
enable_themes = True
use_bootswatch = True
# 设置全局图标
# http://v3.bootcss.com/components/
# http://www.yeahzan.com/fa/facss.html
class GlobalSetting(object):
# 页头
site_title = '学生班级管理系统'
# 页脚
site_footer = 'By苏寅'
# 左侧栏折叠样式
# menu_style = 'accordion'
xadmin.site.register(Student, StudentAdmin)
xadmin.site.register(Grade, GradeAdmin)
xadmin.site.register(views.BaseAdminView, BaseSetting)
xadmin.site.register(views.CommAdminView, GlobalSetting)