Django配置xadmin后台模板之坑(一)


環境: 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" : 出現該錯誤是因為還沒有進行數據遷移操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM