1. 为什么使用 Xadmin
首先,Xadmin 是一款基于 Django 编写的 admin 的替代管理系统。Django 中是自带后台管理模型(admin)的,下面以个人博客项目为例简单介绍 admin 的实现步骤和呈现效果,代码托管在 https://gitee.com/J_WJ/BlogProject。
step1,创建后台管理的超级用户
python manage.py createsuperuser
step2,在 Admin 后台注册模型
"""
- blog 是整个BlogProject项目的一个功能 利用```python manage.py startapp blog```创建的
- Post, Category, Tag是一个类,他们分别对应一个数据库表,表示博文的正文、分类以及标签信息
- 因此,要在后台注册我们自己创建的几个模型,这样 Django Admin 才能知道它们的存在
"""
# blog/admin.py
from django.contrib import admin
from .models import Post, Category, Tag
admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Tag)
step3,定制 Admin 后台
"""
在 admin post 列表页面,我们只能看到文章的标题,
但是我们希望它显示更加详细的信息,这需要我们来定制 Admin 了
"""
# blog/admin.py
from django.contrib import admin
from .models import Post, Category, Tag
class PostAdmin(admin.ModelAdmin):
"""定制信息,继承 admin.ModelAdmin """
list_display = ['title', 'created_time', 'modified_time', 'category',
'author']
# 把新增的 PostAdmin 也注册进来
admin.site.register(Post, PostAdmin)
admin.site.register(Category)
admin.site.register(Tag)
然后,我们通过127.0.0.1:8000/admin
访问项目的后台管理系统,结果如下所示:
最后,我们发现呈现出的效果整体上还是非常不错,用户的认证、授权、登陆、注销以及对blog的分类、标签和编辑都是一应俱全的。但是,有这样的想法还是因为你不了解 Xadmin,直接上效果图对比。
【Xadmin 的优势】:
- Xadmin 可实现更细致的后台管理,例如权限的划分、用户信息的导出机制、用户信息的自定义显示等
- 更人性化的前端页面设计,甚至实现了自定义主题
- 整个实现过程是快速高效的
2. 如何使用 Xadmin
以网上购物项目为例,介绍 Xadmin 的使用,代码托管在 https://gitee.com/J_WJ/ShopProject
【注意】
- 如果你有多个子应用(例如:用户、商品、交易等),那么你可以将所有的子应用放在项目中的同一个文件夹下,如本项目一样
app/users
。如果你仅有一个子应用也不需要放在同一文件夹下,你需要删去代码中不必要的app...
- 如果项目中存在多个子应用,需要将每个子应用注册到Xadmin后台,包括在其 admin.py、apps.py、__init__.py 文件中进行注册以及显示列的设置。但是关于xadmin的基本配置和全局配置仅需要设置一次即可。
- 下面步骤以子应用
app.users
为例
step1,安装 Xadmin 插件
"""
【注意】 博主的开发环境是 python3.7 + Django2.2,
所以需要下载xadmin的分支django2,注意不要下载错了,
如版本不适配会影响正常使用
下载地址: https://github.com/sshwsfc/xadmin/tree/django2
"""
mkdir app/extra_apps # 在你的项目中,为插件创建相应的文件夹
# Xadmin安装方法一: 源码安装进入目录,
# 可以通过git克隆(可能网速太慢而出错),也可以利用浏览器下载后再解压到 app/extra_apps 下
git clone -b django2 https://github.com/sshwsfc/xadmin.git
pip install -i https://pypi.douban.com/simple -r requirements.txt # 安装必要的第三方包
python setup.py install
# xadmin安装方法二: 在线安装
pip install git+git://github.com/sshwsfc/xadmin.git@django2 # 指定djangp版本
step2,Xadmin 本质上还是相当于项目中的一个功能,所以需要进行子应用配置
# ShopProject/settings.py
# 合理使用 Alt+Enter 键导包,不再赘述
INSTALLED_APPS = [
...,
'DjangoUeditor',
'xadmin',
'reversion', # 给admin后台管理提供强大的回滚和恢复功能
...,
]
step3,路由配置
# ShopProject/urls.py
urlpatterns = [
# path('admin/', admin.site.urls),
path('xadmin/', xadmin.site.urls), # 规划路由:127.0.0.1:8000/xadmin
]
step3,在 Xadmin 后台注册子应用,如同 admin 一样
"""
如何配置xadmin的默认设置和通用设置?
- BaseAdminView: 所有AdminView 的基础类,注册在该 View 上的插件可以影响
所有的AdminView.
- CommAdminView: 用户已经登录后显示的 View,也是所有登陆后 View 的基础类。
该 View 主要作用是创建了 Xadmin 的通用元素, 例如:系统菜单,
用户信息等。插件可以通过注册该View来修改这些信息。
"""
# app/users/admin.py
import xadmin
from xadmin import views
from .models import VerifyCode
class BaseSetting(object):
"""xadmin的基本配置"""
# 开启主题切换功能
enable_themes = True
# 支持切换主题
use_bootswatch = True
class GlobalSettings(object):
"""xadmin的全局配置"""
# 设置站点标题
site_title = "电商平台"
# 设置站点的页脚
site_footer = "http://github.com/caihua/"
# 设置菜单折叠,在左侧,默认的
menu_style = "accordion"
class VerifyCodeAdmin(object):
# 列表展示的字段
list_display = ['code', 'mobile', "add_time"]
xadmin.site.register(VerifyCode, VerifyCodeAdmin) # 验证码
xadmin.site.register(views.BaseAdminView, BaseSetting)
xadmin.site.register(views.CommAdminView, GlobalSettings)
在每个应用目录中都包含了 apps.py 文件,用于保存该应用的相关信息。
- AppConfig.name 属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。
- AppConfig.verbose_name 属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示
# app/users/apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'app.users'
verbose_name = "用户管理"
还需要 init.py 中修改默认配置才生效
# app/users/__init__.py
default_app_config = 'app.users.apps.UsersConfig'