django 1.11.16 +Python3.6 + xadmin 的坑
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/[email protected]
以上兩種方法只是面對的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/[email protected]
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’ // 相關依賴
]
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 ) 此時執行專案是無法開啟後臺登入頁的。 還需要進行資料遷移建立相應的表
python manage.py makemigrations
python manage.py migrate
該錯誤有可能發生,原因是資料庫儲存索引欄位做大限制, 本例是因為已經建立多個數據表,總和超過了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資料表也是必須的,否則報錯。
複製程式碼
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模型。
複製程式碼
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後再次註冊 ,修改程式碼如下
1 xadmin.site.unregister(UserProfile)
2 xadmin.site.register(UserProfile, UserProfileAdmin)
重啟專案,訪問後臺如下, 大功告成…
另外可能出現的錯誤:
- ImportError: cannot import name ‘login’ : 出現這個錯誤應該是一開始就安裝了django2.1, 該版本還不能完全相容xadmin2.0, 解決方法是降級為django2.0版本
- 1146, “Table ‘mtapp.xadmin_usersettings’ doesn’t exist” : 出現該錯誤是因為還沒有進行資料遷移操作
分類: Python