1、下载安装xadmin
https://github.com/sshwsfc/xadmin
解压出来找到requirements.txt
pip install -r requirements.txt
安装xadmin
cd到第一层目录:python setup.py install
2、新建一个测试用的工程
(py271-env) [root@V71 pys]# django-admin.py startproject t2
并修改配置settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
]
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
修改中文显示和时区
修改urls.py
3、拷贝xadmin源码到工程中
(py271-env) [root@V71 t2]# mkdir -p extra_apps #可以把第三方的app放到此目录
(py271-env) [root@V71 t2]# cp /shared/xadmin-master/xadmin ./extra_apps/ #拷贝的是xadmin的第二层源码目录
(py271-env) [root@V71 t2]# cp -r /shared/xadmin-master/xadmin ./extra_apps/
4、启动django工程测试
同步数据库,建立超级用户,并启动WEB
这个过程当中可能因为一些包没有被安装或版本不对频繁报错,需要重新安装,有的可能还要安装后重新编译安装PYTHON,比较反复
另外如果是PYTHON3加DJANGO2以上的版本,可能暂时支持得不够好,反复报错,网上有一些解决办法:
比如这个链接比较齐https://www.cnblogs.com/xingfuggz/p/10142388.html
即使如此,在成功启动WEB项目准备访问的时候还是有报错, xadmin login() got an unexpected keyword argument 'extra_context可以先访问admin,再访问xadmin
报错:'Media' object has no attribute 'add_js'可以通过修改python环境下
/pys/.virtualenvs/py371-env/lib/python3.7/site-packages/xadmin-0.6.1-py3.7.egg/xadmin/util.py(这是我使用的python3+django2的测试路径)的vendor方法解决,改成如下:
def vendor(*tags):
css = {'screen': []}
js = []
for tag in tags:
file_type = tag.split('.')[-1]
files = xstatic(tag)
if file_type == 'js':
js.extend(files)
elif file_type == 'css':
css['screen'] += files
return Media(css=css, js=js)
python2相对比较顺利一些
(py271-env) [root@V71 t2]# python manage.py makemigrations
No changes detected
(py271-env) [root@V71 t2]# python manage.py migrate
(py271-env) [root@V71 t2]# python manage.py createsuperuser
此时输入URL能访问XADMIN的话,说明XADMIN部署成功,接下来使用XADMIN实现对APP程序后台数据的管理
5、管理应用程序的后台数据
新建APP
(py271-env) [root@V71 t2]# django-admin.py startapp app1
修改工程的settings.py,导入app的路径和引用app
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'app1'))
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms',
'app1'
]
增加测试数据
(py271-env) [root@V71 app1]# vi models.py
from django.db import models
from __future__ import unicode_literals
# -*- coding: utf-8 -*-
# Create your models here.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class infos1(models.Model):
name = models.CharField('姓名',unique=True,max_length=50)
addr = models.CharField('地址',max_length=128)
tel = models.CharField('电话',max_length=50)
def __str__(self):
return self.name
class Meta:
verbose_name = '信息表'
verbose_name_plural = verbose_name
在应用的目录下增加adminx.py管理上面创建的表
(py271-env) [root@V71 t2]# vi app1/adminx.py
from django.contrib import admin
# Register your models here.
import xadmin
from xadmin import views
from .models import infos1
class infos1Admin(object):
list_display = ['name', 'addr', 'tel']
search_fields = ['name', 'addr']
list_filter = ['name', 'addr', 'tel']
xadmin.site.register(infos1, infos1Admin)
同步数据库,重启工程测试
(py271-env) [root@V71 t2]# python manage.py makemigrations
Migrations for 'app1':
app1/migrations/0001_initial.py
- Create model infos1
(py271-env) [root@V71 t2]# python manage.py migrate
Operations to perform:
Apply all migrations: admin, app1, auth, contenttypes, sessions, xadmin
Running migrations:
Applying app1.0001_initial... OK
此时访问xadmin可以对应用的后台数据进行编辑和管理