環境: 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中添加應用
1 # 將extra_apps的添加至python項目的搜索目錄 2 sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps')) 3 4 INSTALLED_APPS = [ 5 'django.contrib.admin', 6 'django.contrib.auth', 7 'django.contrib.contenttypes', 8 'django.contrib.sessions', 9 'django.contrib.messages', 10 'django.contrib.staticfiles', 11 'xadmin', 12 'crispy_forms', // 相關依賴 13 'reversion' // 相關依賴 14 ]
4 ) urls.py中添加路由
1 from django.contrib import admin // 原來模板模塊 2 from django.urls import path 3 import xadmin // 導入xadmin模塊 4 5 urlpatterns = [ 6 # path('admin/', admin.site.urls), 7 path('xadmin/', xadmin.site.urls), // 修改路由 8 ]
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)中對應的數據表刪除
1 INSTALLED_APPS = [ 2 'django.contrib.admin', 3 'django.contrib.auth', 4 'django.contrib.contenttypes', 5 'django.contrib.sessions', 6 'django.contrib.messages', 7 'django.contrib.staticfiles', 8 # 'xadmin', 9 # 'crispy_forms', 10 # 'reversion' 11 ]
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數據表也是必須的,否則報錯。
1 MIDDLEWARE = [ 2 'django.middleware.security.SecurityMiddleware', 3 'django.contrib.sessions.middleware.SessionMiddleware', 4 'django.middleware.common.CommonMiddleware', 5 'django.middleware.csrf.CsrfViewMiddleware', 6 'django.contrib.auth.middleware.AuthenticationMiddleware', 7 'django.contrib.messages.middleware.MessageMiddleware', 8 'django.middleware.clickjacking.XFrameOptionsMiddleware', 9 ] 10 11 INSTALLED_APPS = [ 12 'django.contrib.admin', 13 'django.contrib.auth', 14 'django.contrib.contenttypes', 15 'django.contrib.sessions', 16 'django.contrib.messages', 17 'django.contrib.staticfiles', 18 # 'xadmin', 19 # 'crispy_forms', 20 # 'reversion' 21 ]
3 ) 去掉之前對xadmin相關配置的注釋 , 此時瀏覽器訪問 localhost:8000/xadmin/ 無法登錄后台, 提示相關表不存在,需要進行數據遷移操作生成數據表。
但切記,不可刪除之前生成的數據表,否則將出現無法創建django_session表的情況 , 並且如果之后需要添加數據表,盡量不要批量進行數據遷移操作, 而是分開單個應用進行數據遷移操作。
打開manage.py命令, 創建成功, 在數據庫中可查看到xadmin_前綴的數據表。
此時重啟項目並瀏覽器登錄后台localhost:8000/xadmin , 輸入賬號密碼, 大功告成...
四、后台顯示數據表
在應用中創建 adminx.py, 必須是adminx.py, 代替了原來的 admin.py
前提是已經設計好UserProfie模型。
1 import xadmin 2 from .models import UserProfile, Comments 3 4 5 # Register your models here. 6 class UserProfileAdmin(object): 7 list_display = ['username', 'password', 8 'email', 'nick_name', 'birth_date', 'gender', 'telephone', 9 'address', 'avatar', 'date_joined'] 10 search_fields = ['nick_name'] 11 list_filter = ['gender'] 12 13 14 class CommentsAdmin(object): 15 list_display = ['title', 'content', 'type', 'add_time'] 16 search_fields = ['title'] 17 list_filter = ['type'] 18 19
20
21 xadmin.site.register(UserProfile, UserProfileAdmin) 22 xadmin.site.register(Comments, CommentsAdmin)
再次訪問,報錯如下。 需要先注銷 UserProfile后再次注冊 ,修改代碼如下
1 xadmin.site.unregister(UserProfile) 2 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" : 出現該錯誤是因為還沒有進行數據遷移操作