环境: Python3.6 + Django2.0 + xadmin2.0

一、安装

  1、首先安装就会有一个坑,很多教程的安装是直接在虚拟环境下使用 pip install xadmin 或者 pip install django-xadmin

    事实证明 Django2+xadmin2的版本是行不通的, 正确方法是通过官方的github https://github.com/sshwsfc/xadmin

      

若使用 pip install xadmin可能会报如下错误, 说是由于README.rst这个文件的编码有问题,其内容也只是安装的介绍,解决方法是

  1)访问xadmin 的 github下载其压缩包zip,然后解压

2 ) 直接在虚拟环境下运行 pip install <压缩包路径> 如:pip install xadmin.zip

  4 ) 此时xadmin及其依赖包被下载到 虚拟环境下

  2. 安装方法二:

    pip install git+git://github.com/sshwsfc/xadmin.git
      或者
    pip install git+git://github.com/sshwsfc/xadmin.git@django2

    以上两种方法只是面对的Django版本不同, 可自行选择。

    该方法可以将xadmin和其依赖包直接安装虚拟环境下

  3. 安装方法三:

    1)同样使用git clone 或者下载zip压缩包的方式将源码下载到本地

                 

    2 ) 拿到根目录下的xadmin, 存放在 extra_apps(自定义)目录下,作为第三方依赖的存放目录

    3 )  将extra_apps目录设置为 Resource Root,右键 Mark Directory as -> Resource Root

二、配置

  无论使用哪一种安装方式, 接下配置并且migrate的顺序很重要,否则可能会引发一系列的报错, 以下先使用方法二安装好依赖, 再使用安装方法三引入xadmin。

  1 )  使用 pip list 可以查看依赖包, 使用方法一和二安装时自动安装,如果直接使用方法三安装依赖参考github,但比较麻烦。

2 ) 此处是使用  pip install git+git://github.com/sshwsfc/xadmin.git@django2, 可以同时安装依赖包, 然后将虚拟环境下的xadmin卸载 pip uninstall xadmin , 再使用方法三extra_apps方式引入xadmin源码。

  3 ) settings.py中添加应用

 # 将extra_apps的添加至python项目的搜索目录
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps')) INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'xadmin',
'crispy_forms', // 相关依赖
'reversion'    // 相关依赖
]

  4 ) urls.py中添加路由

 from django.contrib import admin   // 原来模板模块
from django.urls import path
import xadmin // 导入xadmin模块 urlpatterns = [
# path('admin/', admin.site.urls),
path('xadmin/', xadmin.site.urls), // 修改路由
]

5 ) 此时运行项目是无法打开后台登录页的。 还需要进行数据迁移创建相应的表

   工具栏运行: Tool -> Run manage.py task ->

  

该错误有可能发生,原因是数据库保存索引字段做大限制, 本例是因为已经创建多个数据表,总和超过了1000导致报错,解决办法是分别将每个应用的模型做数据迁移。避免一次性超过限制大小而报错。当然,在后面使用正确顺序操作时也可以解决。

    

  此时浏览器运行 localhost:8000/xadmin/ 报错如下:该错误是由于以上错误中断了django_session数据表的创建。

  

三、重新进行数据迁移操作(避免出现以上错误: django.db.utils.InternalError: (1071) 和 django_session)

  1 ) 将之前 setings.py和urls.py 添加的代码先注释 , 同时将数据库(MySQL)中对应的数据表删除

 INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'xadmin',
# 'crispy_forms',
# 'reversion'
]
from django.contrib import admin
from django.urls import path
import xadmin urlpatterns = [
path('admin/', admin.site.urls),
# path('xadmin/', xadmin.site.urls),
]

  2 ) 暂时使用官方的后台模板,创建数据迁移表并生成数据, 此时是官方配置,故无兼容性问题,在数据库中也生成对应的数据表。

    

    创建管理员账号 createsuperuser, 按提示输入账号密码即可, 然后再浏览器访问后台 localhost:8000/admin   登录即可。

    

    

   此时查看数据库可以看到有django_session数据表

 

  两段代码中可看到

'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.sessions',
默认配置中使用session作为后台数据存储 ,故django_session数据表也是必须的,否则报错。
 MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
] INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'xadmin',
# 'crispy_forms',
# 'reversion'
]

  3 ) 去掉之前对xadmin相关配置的注释 , 此时浏览器访问 localhost:8000/xadmin/ 无法登录后台, 提示相关表不存在,需要进行数据迁移操作生成数据表。

    但切记,不可删除之前生成的数据表,否则将出现无法创建django_session表的情况 , 并且如果之后需要添加数据表,尽量不要批量进行数据迁移操作, 而是分开单个应用进行数据迁移操作。

  

  打开manage.py命令, 创建成功, 在数据库中可查看到xadmin_前缀的数据表。

  

  此时重启项目并浏览器登录后台localhost:8000/xadmin , 输入账号密码, 大功告成...

  

四、后台显示数据表

  在应用中创建 adminx.py, 必须是adminx.py, 代替了原来的 admin.py

前提是已经设计好UserProfie模型。

 import xadmin
from .models import UserProfile, Comments # Register your models here.
class UserProfileAdmin(object):
list_display = ['username', 'password',
'email', 'nick_name', 'birth_date', 'gender', 'telephone',
'address', 'avatar', 'date_joined']
search_fields = ['nick_name']
list_filter = ['gender'] class CommentsAdmin(object):
list_display = ['title', 'content', 'type', 'add_time']
search_fields = ['title']
list_filter = ['type'] xadmin.site.register(UserProfile, UserProfileAdmin)
xadmin.site.register(Comments, CommentsAdmin)

再次访问,报错如下。 需要先注销 UserProfile后再次注册 ,修改代码如下

 xadmin.site.unregister(UserProfile)
xadmin.site.register(UserProfile, UserProfileAdmin)

重启项目,访问后台如下, 大功告成....

另外可能出现的错误:

1. ImportError: cannot import name 'login'  : 出现这个错误应该是一开始就安装了django2.1, 该版本还不能完全兼容xadmin2.0, 解决方法是降级为django2.0版本
2. 1146, "Table 'mtapp.xadmin_usersettings' doesn't exist" : 出现该错误是因为还没有进行数据迁移操作

Django配置xadmin后台模板之坑(一)的更多相关文章

  1. django 配置xadmin

    django xadmin本地安装 百度云 下载,激活码:bxhv,下载后不需要解压,直接本地 pip install xxx.zip django 版本需要 1.1.11, 1,添加app INST ...

  2. Django 改变xadmin后台英文为中文

    1.标题 setting.py文件: LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' 修改: LANGUAGE_CODE = 'zh-Hans' TIME_ZONE ...

  3. Django出错Xadmin后台报list index out of range

    input_html = [ht for ht in super(AdminSplitDateTime, self).render(name, value, attrs).split('/>&l ...

  4. django+x-admin管理后台模板开发管理后台案例(设计部分)

    使用django+x-admin管理后台模板搭建管理后台 一.环境需求 1.django:3.1 2.python:3.7 3.x-admin:2.2 4.pycharm:2020.3.2 5.ubu ...

  5. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明

    第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...

  6. 第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置

    第三百九十三节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置 设置后台某个字段的排序规则 在当前APP里的adminx.py文件里的数据表管理器里设置 order ...

  7. Django配置后台xadmin管理界面

    Django配置后台xadmin管理界面 python版本3.6.5 Django版本1.10.8(刚开始是2.1.5,由于各种错误,改成了低版本) 1.xadmin的安装,下载地址https://g ...

  8. python3.4下django集成使用xadmin后台

    环境:window7 x64.python3.4.django1.10 一.pip install xadmin安装报错 1.使用pip install xadmin命令安装可能报如下错误: 2.解决 ...

  9. 第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理

    第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点 ...

随机推荐

  1. Java8 in action

    解决的问题: behavior parameterization,即可以把一段code,逻辑作为参数传入: 这样做的目的,当然为了代码抽象和重用,把变化的逻辑抽象出去: 在java中,如果要实现beh ...

  2. java中使用jdbc配置连接串时mysql 5.6与5.7版本“编码”参数有区别!

    在mysql5.6中 java程序使用jdbc时链接字符串应该使用?characterEncoding=utf-8,而5.7版本可以省略,否则可能会有相关的语句执行结果出错! String drive ...

  3. wait()函数的详细分析

    之前一直没太深入的去理解wait()函数,今天机缘巧合之前又看了看,发现之前没有真正的理解该函数. 众所周知,wait()函数一般用在父进程中等待回收子进程的资源,而防止僵尸进程的产生. (In UN ...

  4. 洛谷P3250 网络 [HNOI2016] 整体二分

    正解:整体二分+树状数组 解题报告: 传送门! 亲这里的建议是用整体二分呢 dbq最近看sd淘宝说话体看多了有点脑抽,,, 首先考虑如果是单组询问怎么做昂QAQ 考虑二分答案 对于所有比mid小的操作 ...

  5. 不能往Windows Server 2008 R2 Server中复制文件的解决方法

    目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度找到了解决方法,特此记录(记忆). 1.在任务管理器中找到“rdpclip.e ...

  6. es分词器

    1.默认的分词器 standard standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字 ...

  7. MyBatis的核心组件

    MyBatis的核心组件主要分为4个部分 SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式 ...

  8. 【JMeter】插件安装

    安装插件的方法有两种,一种是传统的方式,即官网下载,本地配置,重启jmeter.现在有一种快捷的方法可以自定义安装插件-插件管理器 JMeter 插件管理器的使用方法很简单:不要手动安装各种插件,它提 ...

  9. 从零开始编写操作系统——bochs

    一.生成boot.bin boot sector代码: loop: jmp loop times -($-$$) db dw 0xaa55 重点就是最后的0xaa55 nasm boot.asm -f ...

  10. WordPress如何屏蔽恶意关键词搜索

    我们在用WordPress建站比较方便,但如果网站有一定的权重后,一些不怀好意的人就会过来制作恶意内容,比如故意搜索邪恶的关键词.垃圾评论等,那我们如何屏蔽恶意搜索关键词呢?不会很难,会写点代码的朋友 ...