Django配置xadmin後臺模板之坑(一)

<div id="cnblogs_post_body" class="blogpost-body "> <p><span style="font-size: 18pt;">安裝Xadmin</span></p> <p><span style="font-size: 16px;">安裝 Xadmin 的時候,須要注意 Django 的版本,Xadmin 在 Github 上的倉庫 master 分支是支持 Django 1.9 版本的,假如是 Django 2.0 版本的,則須要從 Django2 分支安裝</span></p> <p><span style="font-size: 16px;"># 從 PyPI 安裝 支持 django 1.9</span></p> <p><span style="font-size: 16px;">pip install xadmin</span></p> <p><span style="font-size: 16px;"># 支持 django 1.4</span></p> <p><span style="font-size: 16px;">$ pip install django-xadmin</span></p> <p><span style="font-size: 16px;"># 從源碼安裝 支持django 2.0&nbsp;</span></p> <p><span style="font-size: 16px;">$ pip install git+git://github.com/sshwsfc/xadmin.git@django2</span></p> <p><span style="font-size: 16px;">以上安裝方法會同時安裝好須要的第三方庫,而若是是直接在 Github 上下載 zip 源碼包或是使用 git clone 命令,則須要本身安裝,可使用一下命令</span></p> <p><span style="font-size: 16px;"># 在工程項目根目錄中執行一下命令</span></p> <p><span style="font-size: 16px;">$ pip install -r requirements.txt</span></p> <p><span style="font-size: 18pt;">配置</span></p> <p><span style="font-size: 16px;">在setting中註冊相應庫</span></p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre>INSTALLED_APPS =<span style="color: #000000;"> [ ... </span><span style="color: #800000;">'</span><span style="color: #800000;">xadmin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #800000;">'</span><span style="color: #800000;">crispy_forms</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #800000;">'</span><span style="color: #800000;">reversion</span><span style="color: #800000;">'</span><span style="color: #000000;">, ]</span></pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p><span style="font-size: 16px;">添加url規則</span></p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #0000ff;">from</span><span style="color: #000000;"> django.urls import path import xadmin xadmin.autodiscover()javascript

version模塊自動註冊須要版本控制的 Model

</span><span style="color: #0000ff;">from</span><span style="color: #000000;"> xadmin.plugins import xversion xversion.register_models()java

urlpatterns </span>=<span style="color: #000000;"> [ # 將原先的 admin.site.urls 替換爲如下 path(</span><span style="color: #800000;">'</span><span style="color: #800000;">admin/</span><span style="color: #800000;">'</span><span style="color: #000000;">, xadmin.site.urls), ]</span></pre>python

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.co<div id="cnblogs_post_body" class="blogpost-body "> <p>環境: Python3.6 + Django2.0 + xadmin2.0</p> <p>1、安裝</p> <p>  一、首先安裝就會有一個坑,不少教程的安裝是直接在虛擬環境下使用 pip install xadmin&nbsp;或者 pip install django-xadmin</p> <p>    事實證實 Django2+xadmin2的版本是行不通的,&nbsp;正確方法是經過官方的github&nbsp;<a title="xadmin官網Github" href="https://github.com/sshwsfc/xadmin" target="_blank">https://github.com/sshwsfc/xadmin</a></p> <p>      <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807232619800-483239329.png" alt=""></p> <p>若使用 pip install xadmin可能會報以下錯誤,&nbsp;說是因爲README.rst這個文件的編碼有問題,其內容也只是安裝的介紹,解決方法是</p> <p>  1)訪問xadmin&nbsp;的 github下載其壓縮包zip,而後解壓</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;2 )&nbsp;直接在虛擬環境下運行 pip install &lt;壓縮包路徑&gt;&nbsp;如:pip install xadmin.zip</p> <p>  4 )&nbsp;此時xadmin及其依賴包被下載到&nbsp;虛擬環境下</p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807232914458-1396505512.png" alt=""></p> <p>&nbsp;</p> <p>  2.&nbsp;安裝方法二:</p> <pre>    pip install git+git://github.com/sshwsfc/xadmin.git<br>      或者<br>    pip install git+git://github.com/sshwsfc/xadmin.git@django2</pre> <p>    以上兩種方法只是面對的Django版本不一樣,&nbsp;可自行選擇。</p> <p>    該方法能夠將xadmin和其依賴包直接安裝虛擬環境下</p> <p>  3.&nbsp;安裝方法三:</p> <p>    1)一樣使用git clone&nbsp;或者下載zip壓縮包的方式將源碼下載到本地</p> <p>&nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180807235122795-1306951434.png" alt=""></p> <p>    2 )&nbsp;拿到根目錄下的xadmin,&nbsp;存放在 extra_apps(自定義)目錄下,做爲第三方依賴的存放目錄</p> <p>    3 )&nbsp; 將extra_apps目錄設置爲 Resource Root,右鍵 Mark Directory as -&gt; Resource Root</p> <p>2、配置</p> <p>  不管使用哪種安裝方式,&nbsp;接下配置而且migrate的順序很重要,不然可能會引起一系列的報錯,&nbsp;如下先使用方法二安裝好依賴,&nbsp;再使用安裝方法三引入xadmin。</p> <p>  1 )&nbsp; 使用 pip list&nbsp;能夠查看依賴包, 使用方法一和二安裝時自動安裝,若是直接使用方法三安裝依賴參考github,但比較麻煩。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; 2 )&nbsp;此處是使用&nbsp;&nbsp;pip install git+git://github.com/sshwsfc/xadmin.git@django2,&nbsp;能夠同時安裝依賴包,&nbsp;而後將虛擬環境下的xadmin卸載 pip uninstall xadmin ,&nbsp;再使用方法三extra_apps方式引入xadmin源碼。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808002305205-479428038.png" alt=""></p> <p>  3 ) settings.py中添加應用</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #008080;"> 1</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 將extra_apps的添加至python項目的搜索目錄</span> <span style="color: #008080;"> 2</span> sys.path.insert(0, os.path.join(BASE_DIR, <span style="color: #800000;">'</span><span style="color: #800000;">extra_apps</span><span style="color: #800000;">'</span><span style="color: #000000;">)) </span><span style="color: #008080;"> 3</span> <span style="color: #008080;"> 4</span> INSTALLED_APPS =<span style="color: #000000;"> [ </span><span style="color: #008080;"> 5</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.admin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 6</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 7</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.contenttypes</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 9</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">10</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.staticfiles</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">11</span> <span style="color: #800000;">'</span><span style="color: #800000;">xadmin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">12</span> <span style="color: #800000;">'</span><span style="color: #800000;">crispy_forms</span><span style="color: #800000;">'</span><span style="color: #000000;">, // 相關依賴 </span><span style="color: #008080;">13</span> <span style="color: #800000;">'</span><span style="color: #800000;">reversion</span><span style="color: #800000;">'    // 相關依賴</span> <span style="color: #008080;">14</span> ]</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p>  4 ) urls.py中添加路由</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #008080;">1</span> <span style="color: #0000ff;">from</span> django.contrib <span style="color: #0000ff;">import</span> admin //<span style="color: #000000;"> 原來模板模塊 </span><span style="color: #008080;">2</span> <span style="color: #0000ff;">from</span> django.urls <span style="color: #0000ff;">import</span><span style="color: #000000;"> path </span><span style="color: #008080;">3</span> <span style="color: #0000ff;">import</span> xadmin //<span style="color: #000000;"> 導入xadmin模塊 </span><span style="color: #008080;">4</span> <span style="color: #008080;">5</span> urlpatterns =<span style="color: #000000;"> [ </span><span style="color: #008080;">6</span> <span style="color: #008000;">#</span><span style="color: #008000;"> path('admin/', admin.site.urls),</span> <span style="color: #008080;">7</span> path(<span style="color: #800000;">'</span><span style="color: #800000;">xadmin/</span><span style="color: #800000;">'</span>, xadmin.site.urls), //<span style="color: #000000;"> 修改路由 </span><span style="color: #008080;">8</span> ] </pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p>&nbsp; &nbsp; &nbsp; 5 )&nbsp;此時運行項目是沒法打開後臺登陸頁的。&nbsp;還須要進行數據遷移建立相應的表</p> <p>   工具欄運行: Tool -&gt; Run manage.py task -&gt;&nbsp;</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808003703961-1335236146.png" alt=""></p> <p>&nbsp; &nbsp; &nbsp; &nbsp;該錯誤有可能發生,緣由是數據庫保存索引字段作大限制,&nbsp;本例是由於已經建立多個數據表,總和超過了1000致使報錯,解決辦法是分別將每一個應用的模型作數據遷移。避免一次性超過限制大小而報錯。固然,在後面使用正確順序操做時也能夠解決。</p> <p> &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808004041155-384522079.png" alt=""></p> <p>&nbsp;</p> <p>  此時瀏覽器運行 localhost:8000/xadmin/ 報錯以下:該錯誤是因爲以上錯誤中斷了django_session數據表的建立。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808001934622-808716733.png" alt=""></p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808001901647-975441362.png" alt=""></p> <p>&nbsp; &nbsp; &nbsp;&nbsp;</p> <p>3、從新進行數據遷移操做(避免出現以上錯誤: django.db.utils.InternalError: (1071)&nbsp;和 django_session)</p> <p>  1 )&nbsp;將以前 setings.py和urls.py 添加的代碼先註釋 ,&nbsp;同時將數據庫(MySQL)中對應的數據表刪除</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #008080;"> 1</span> INSTALLED_APPS =<span style="color: #000000;"> [ </span><span style="color: #008080;"> 2</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.admin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 3</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 4</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.contenttypes</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 5</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 6</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 7</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.staticfiles</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'xadmin',</span> <span style="color: #008080;"> 9</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'crispy_forms',</span> <span style="color: #008080;">10</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'reversion'</span> <span style="color: #008080;">11</span> ]</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #0000ff;">from</span> django.contrib <span style="color: #0000ff;">import</span><span style="color: #000000;"> admin </span><span style="color: #0000ff;">from</span> django.urls <span style="color: #0000ff;">import</span><span style="color: #000000;"> path </span><span style="color: #0000ff;">import</span><span style="color: #000000;"> xadmingit

urlpatterns </span>=<span style="color: #000000;"> [ path(</span><span style="color: #800000;">'</span><span style="color: #800000;">admin/</span><span style="color: #800000;">'</span><span style="color: #000000;">, admin.site.urls), </span><span style="color: #008000;">#</span><span style="color: #008000;"> path('xadmin/', xadmin.site.urls),</span> ]</pre>github

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p>  2 )&nbsp;暫時使用官方的後臺模板,建立數據遷移表並生成數據,&nbsp;此時是官方配置,故無兼容性問題,在數據庫中也生成對應的數據表。</p> <p>    <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808005732861-682360765.png" alt=""></p> <p>    建立管理員帳號 createsuperuser,&nbsp;按提示輸入帳號密碼便可,&nbsp;而後再瀏覽器訪問後臺 localhost:8000/admin&nbsp; &nbsp;登陸便可。</p> <p>    <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808010006482-645058047.png" alt=""></p> <p>    <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808010358775-1118836361.png" alt=""></p> <p>   此時查看數據庫能夠看到有django_session數據表</p> <p>&nbsp; <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808010506827-798245831.png" alt=""></p> <p>  兩段代碼中可看到</p> <pre>'django.contrib.sessions.middleware.SessionMiddleware'<span>,</span></pre> <pre>'django.contrib.sessions'<span>,</span><br>默認配置中使用session做爲後臺數據存儲 ,故django_session數據表也是必須的,不然報錯。</pre> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #008080;"> 1</span> MIDDLEWARE =<span style="color: #000000;"> [ </span><span style="color: #008080;"> 2</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.security.SecurityMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 3</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions.middleware.SessionMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 4</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.common.CommonMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 5</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.csrf.CsrfViewMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 6</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth.middleware.AuthenticationMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 7</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages.middleware.MessageMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.middleware.clickjacking.XFrameOptionsMiddleware</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 9</span> <span style="color: #000000;">] </span><span style="color: #008080;">10</span> <span style="color: #008080;">11</span> INSTALLED_APPS =<span style="color: #000000;"> [ </span><span style="color: #008080;">12</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.admin</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">13</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.auth</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">14</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.contenttypes</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">15</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.sessions</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">16</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.messages</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">17</span> <span style="color: #800000;">'</span><span style="color: #800000;">django.contrib.staticfiles</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;">18</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'xadmin',</span> <span style="color: #008080;">19</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'crispy_forms',</span> <span style="color: #008080;">20</span> <span style="color: #008000;">#</span><span style="color: #008000;"> 'reversion'</span> <span style="color: #008080;">21</span> ]</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p>&nbsp;</p> <p>  3 )&nbsp;去掉以前對xadmin相關配置的註釋 ,&nbsp;此時瀏覽器訪問 localhost:8000/xadmin/ 沒法登陸後臺,&nbsp;提示相關表不存在,須要進行數據遷移操做生成數據表。</p> <p>    但切記,不可刪除以前生成的數據表,不然將出現沒法建立django_session表的狀況 ,&nbsp;而且若是以後須要添加數據表,儘可能不要批量進行數據遷移操做,&nbsp;而是分開單個應用進行數據遷移操做。</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011045254-1215852194.png" alt=""></p> <p>&nbsp; &nbsp; &nbsp; &nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011111168-1677596782.png" alt=""></p> <p>  打開manage.py命令,&nbsp;建立成功,&nbsp;在數據庫中可查看到xadmin_前綴的數據表。</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011437246-1869665181.png" alt=""></p> <p>  此時重啓項目並瀏覽器登陸後臺localhost:8000/xadmin ,&nbsp;輸入帳號密碼,&nbsp;大功告成...</p> <p>  <img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011638671-1646092181.png" alt=""></p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808011708864-519226482.png" alt=""></p> <p>&nbsp;</p> <p>&nbsp;4、後臺顯示數據表</p> <p>  在應用中建立 adminx.py,&nbsp;必須是adminx.py,&nbsp;代替了原來的 admin.py</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;前提是已經設計好UserProfie模型。</p> <p>&nbsp; &nbsp; &nbsp; &nbsp;</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">import</span><span style="color: #000000;"> xadmin </span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">from</span> .models <span style="color: #0000ff;">import</span><span style="color: #000000;"> UserProfile, Comments </span><span style="color: #008080;"> 3</span> <span style="color: #008080;"> 4</span> <span style="color: #008080;"> 5</span> <span style="color: #008000;">#</span><span style="color: #008000;"> Register your models here.</span> <span style="color: #008080;"> 6</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UserProfileAdmin(object): </span><span style="color: #008080;"> 7</span> list_display = [<span style="color: #800000;">'</span><span style="color: #800000;">username</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">password</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 8</span> <span style="color: #800000;">'</span><span style="color: #800000;">email</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">nick_name</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">birth_date</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">gender</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">telephone</span><span style="color: #800000;">'</span><span style="color: #000000;">, </span><span style="color: #008080;"> 9</span> <span style="color: #800000;">'</span><span style="color: #800000;">address</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">avatar</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">date_joined</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">10</span> search_fields = [<span style="color: #800000;">'</span><span style="color: #800000;">nick_name</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">11</span> list_filter = [<span style="color: #800000;">'</span><span style="color: #800000;">gender</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">12</span> <span style="color: #008080;">13</span> <span style="color: #008080;">14</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> CommentsAdmin(object): </span><span style="color: #008080;">15</span> list_display = [<span style="color: #800000;">'</span><span style="color: #800000;">title</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'content</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">type</span><span style="color: #800000;">'</span>, <span style="color: #800000;">'</span><span style="color: #800000;">add_time</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">16</span> search_fields = [<span style="color: #800000;">'</span><span style="color: #800000;">title</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">17</span> list_filter = [<span style="color: #800000;">'</span><span style="color: #800000;">type</span><span style="color: #800000;">'</span><span style="color: #000000;">] </span><span style="color: #008080;">18</span> <span style="color: #008080;">19</span> <br><span style="color: #008080;">20</span> <br><span style="color: #008080;">21</span> <span style="color: #000000;">xadmin.site.register(UserProfile, UserProfileAdmin) </span><span style="color: #008080;">22</span> xadmin.site.register(Comments, CommentsAdmin)</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p>&nbsp;</p> <p>&nbsp;再次訪問,報錯以下。&nbsp;須要先註銷 UserProfile後再次註冊 ,修改代碼以下</p> <div class="cnblogs_code"> <pre><span style="color: #008080;">1</span> <span style="color: #000000;">xadmin.site.unregister(UserProfile) </span><span style="color: #008080;">2</span> xadmin.site.register(UserProfile, UserProfileAdmin)</pre> </div> <p>&nbsp;</p> <p>&nbsp;<img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808015125329-1032086542.png" alt=""></p> <p>重啓項目,訪問後臺以下,&nbsp;大功告成....</p> <p><img src="https://images2018.cnblogs.com/blog/1160467/201808/1160467-20180808014947500-325635752.png" alt=""></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>另外可能出現的錯誤:</p> <pre>1. ImportError: cannot import name 'login' : 出現這個錯誤應該是一開始就安裝了django2.1, 該版本還不能徹底兼容xadmin2.0, 解決方法是降級爲django2.0版本<br>2. 1146, "Table 'mtapp.xadmin_usersettings' doesn't exist" : 出現該錯誤是由於尚未進行數據遷移操做</pre> </div>m/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p><span style="font-size: 18pt;">最後在數據庫遷移</span></p> <p>&nbsp;</p> </div>數據庫

相關文章
相關標籤/搜索