Admin组件
Django 提供了基于 web 的管理工具。
Django 自动管理工具是 django.contrib 的一部分。你可以在项目的settings.py
中的 INSTALLED_APPS
看到它:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
]
admin组件的使用步骤
- 激活管理工具
通常我们在生成项目时会在urls.py
中自动设置好。
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
- 在app下的
admin.py
文件进行注册
省略创建模型类不步骤
admin.site.register(models.Book)
-
通过浏览器url为
http://127.0.0.1:8000/admin/
, 获取一个admin的登录页面
-
没有超级管理用户,注册
python3 manage.py createsupperuser
依次输入用户名/email/密码(root!23456) -
登录admin管理页面,进行数据管理
但是,这种方式比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作。 -
自定制页面的效果
我们可以自定制类继承admin.ModelAdmin
类,来扩展方法。有以下两种方式注册:
# 方式一:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'price', 'publish')
admin.site.register(models.Book, BookAdmin)
# 方式二:
@admin.register(models.Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'price', 'publish')
- ModelAdmin中提供了大量的可定制功能,下面我们列举一下常用的功能:
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'price', 'publish', 'show_author') # 定制展示的列
list_display_links = ('price', ) # 定制跳转的列
list_filter = ('publish', 'authors') # 定制过滤列
search_fields = ('title', 'price') # 定制模糊搜索列
list_editable = ('title', ) # 定制可以直接编辑的列
actions = ['patch_init'] # 定制批量处理方法
ordering = ['-price'] # 通过该列进行排序,默认升序
def show_author(self, obj): # 自定制展示列
return "|".join([i.name for i in obj.authors.all()])
def patch_init(self, request, queryset): # 初始化单价
queryset.update(price=100)
patch_init.short_description = "批量初始化" # 设置操作名称
admin.site.register(models.Book, BookAdmin)
admin.site.register(models.Publish, PublishAdmin)
admin.site.register(models.Author)
admin.site.register(models.AuthorDetail)
- 内置url命名方式
查:
http://127.0.0.1:8000/admin/app01/book/
增:
http://127.0.0.1:8000/admin/app01/book/add/
改:
http://127.0.0.1:8000/admin/app01/book/1/change/
删:
http://127.0.0.1:8000/admin/app01/book/2/delete/
Xadmin组件
xadmin是Django的第三方扩展,比使用Django的admin站点更强大也更方便。
xadmin官方文档
安装
- 通过如下命令安装xadmin的最新版
pip3 install https://codeload.github.com/sshwsfc/xadmin/zip/django2
- 下载完成后,在配置文件中注册如下应用
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
'reversion',
'app01.apps.App01Config',
]
# 修改使用中文界面
LANGUAGE_CODE = 'zh-Hans'
# 修改时区
TIME_ZONE = 'Asia/Shanghai'
- xadmin有建立自己的数据库模型类,需要进行数据库迁移。
python manage.py makemigrations
python manage.py migrate
- 在总路由中添加xadmin的路由信息
import xadmin
xadmin.autodiscover()
# version模块自动注册需要版本控制的 Model
from xadmin.plugins import xversion
xversion.register_models()
urlpatterns = [
path(r'xadmin/', xadmin.site.urls),
]
xadmin的使用步骤
xadmin不再使用Django的admin.py
,而是需要编写代码在adminx.py
文件中。
xadmin的站点管理类不用继承 admin.ModelAdmin
,而是直接继承object
即可。
在子应用中创建adminx.py文件。(注意:不要创建
xadmin.py
)
- 站点的全局配置
import xadmin
from xadmin import views
class BaseSetting(object):
"""xadmin的基本配置"""
enable_themes = True # 开启主题切换功能
use_bootswatch = True # 引导控制菜单
xadmin.site.register(views.BaseAdminView, BaseSetting)
class GlobalSettings(object):
"""xadmin的全局配置"""
site_title = "路飞学城" # 设置站点标题
site_footer = "路飞学城有限公司" # 设置站点的页脚
menu_style = "accordion" # 设置菜单折叠
xadmin.site.register(views.CommAdminView, GlobalSettings)
- 站点model管理
xadmin可以使用的页面样式控制基本与Django原生的admin一致
from .models import Book
class BookAdminModel(object):
# 控制列表展示的字段 设置默认展示字段
list_display = ['title', 'price', 'pub_date', 'publish', 'authors']
# 控制可以通过搜索框搜索的字段名称,xadmin使用的是模糊查询
search_fields = ['id', 'title', 'price']
# 可以进行过滤操作的列,对于分类、性别、状态
list_filter = ['id', 'title', 'price', 'publish']
# 排序,默认升序
ordering = ['-price']
# 展示详情信息的字段
show_detail_fields = ['title']
# 设置允许直接在展示页编辑的字段
list_editable = ['price']
# 设置列表页的刷新频率
refresh_times = [3, 6, 30, 60]
# 控制列表页导出数据的可选格式,设置None来禁用数据导出功能
list_export = ['xls', 'csv', 'json']
# 控制是否显示书签功能,False表示关闭
show_bookmarks = True
# 显示图表数据
data_charts = {
'price_total': {
'title': '书籍单价曲线图',
'x-field': 'id',
'y-field': 'price',
'order': ('id',),
},
# 可以有多个图表
# 'price_total2': {
# 'title': '书籍单价曲线图2',
# 'x-field': 'id',
# 'y-field': 'price',
# 'order': ('id',),
# }
}
# 控制菜单的图标(图标的设置可以参考boostrap的图标css名称)
model_icon = 'fa fa-gift'
# 设置编辑页中只读字段
readonly_fields = ['title']
# 设置在编辑页隐藏的字段
exclude = ['pub_date']
xadmin.site.register(Book, BookAdminModel)