django3整合xadmin趟坑

django是非常豐富功能強大的python web框架槽袄,而如果只是個人或小團隊爷辱,實驗的使用鳄乏,一般是原生admin后臺管理唠亚,xadmin是一款開源的更為強大豐富的后臺管理系統(tǒng)蚪战,可以方便我們對相關(guān)數(shù)據(jù)庫model和user的管理牵现。可以方便搭建一個企業(yè)級的后臺管理系統(tǒng)邀桑,很多團隊和企業(yè)也會基于其進行二次開發(fā)瞎疼,搭建個性化的系統(tǒng)。
github地址:https://github.com/sshwsfc/xadmin
網(wǎng)站說明:http://sshwsfc.github.io/xadmin/

image.png

特點

xadmin官網(wǎng)都有直觀詳細的介紹
主要是具有比原生admin更好的界面和體驗壁畸,基于Twitter Boostrap贼急,也有專門的個性化主題
http://x.xuebingsi.com
很多人也分享新的主題

image.png

另外可以直接簡便替換原生admin,只要更改setting文件和urls文件即可

豐富的插件化擴展功能支持捏萍,在包里直接增加即可太抓,如過濾器插件,數(shù)據(jù)提取插件


image.png

接下里就是數(shù)據(jù)相關(guān)的豐富功能令杈,可以支持日期走敌,數(shù)字的數(shù)據(jù)過濾等;全面的增刪改查功能逗噩,
支持xls 掉丽、json 等各種數(shù)據(jù)導(dǎo)出功能,
豐富的數(shù)據(jù)分析可視化功能等等异雁。


image.png

比如這是個模板
再看下requirement文件可以看到需要一些依賴
前面的兩個是必須的捶障,后門的可選,
xlwt纲刀,xlsxwriter 是支持Excel表格導(dǎo)出的包残邀,可以選擇。

廢話不說了,開始體驗吧

下載安裝xadmin

和其他python包類似可以pip下載 : pip install xadmin
推薦使用下載源碼安裝
pip install https://github.com/sshwsfc/xadmin/tarball/master

image.png

安裝成功后芥挣,將下載的xadmin包復(fù)制到項目目錄下:
項目主配置目錄refs下 setting文件加上三個應(yīng)用


image.png

增加路由
refs/urls.py增加

from django.conf.urls import url,include
from xadmin.plugins import xversion
import xadmin

xversion.register_models()
xadmin.autodiscover()

urlpatterns = [
    #path("admin/", admin.site.urls),
    path("xadmin"),xadmin.site.urls),

根據(jù)model的更改生成migrations文件驱闷,也就是數(shù)據(jù)遷移的動作文件
python manage.py makemigrations

問題1:
File "E:\workspace\SmartScientificResearchAssistant\xadmin\models.py", line 8, in <module>
from django.core.urlresolvers import NoReverseMatch, reverse
ModuleNotFoundError: No module named 'django.core.urlresolvers'

這里要使用django.urls,django.core.urlresolvers包其實沒有了空免,在xadmin里很多地方有這個地方
對model.py 文件里
from django.core.urlresolvers import NoReverseMatch, reverse
替換成
from django.urls import NoReverseMatch, reverse
還有很多其他文件也用到了 這個包空另,所以可以批量搜索替換含有 django.core.urlresolvers 的地方。

問題2
File "E:\workspace\SmartScientificResearchAssistant\xadmin\models.py", line 11, in <module>
from django.utils.encoding import python_2_unicode_compatible, smart_text
ImportError: cannot import name 'python_2_unicode_compatible' from 'django.utils.encoding' (D:\ProgramData\Anaconda3\envs\myproject\lib\site-packages\django\utils\encoding.py)

使用
from six import python_2_unicode_compatible
替代
from django.utils.encoding import python_2_unicode_compatible, smart_text

問題3:
File "E:\workspace\SmartScientificResearchAssistant\xadmin\models.py", line 19, in <module>
from xadmin.util import quote
File "E:\workspace\SmartScientificResearchAssistant\xadmin\util.py", line 24, in <module>
from django.contrib.staticfiles.templatetags.staticfiles import static
ModuleNotFoundError: No module named 'django.contrib.staticfiles.templatetags'

將from django.contrib.staticfiles.templatetags.staticfiles import static
替換成
from django.templatetags.static import static


image.png

問題4:
File "E:\workspace\SmartScientificResearchAssistant\xadmin\models.py", line 46, in <module>
class Bookmark(models.Model):
File "E:\workspace\SmartScientificResearchAssistant\xadmin\models.py", line 48, in Bookmark
user = models.ForeignKey(AUTH_USER_MODEL, verbose_name=_(u"user"), blank=True, null=True)
TypeError: init() missing 1 required positional argument: 'on_delete'

這是model的數(shù)據(jù)定義不符合數(shù)據(jù)庫級聯(lián)方式蹋砚,外鍵記錄要隨著主鍵表的記錄刪除而刪除扼菠。
凡是出現(xiàn)關(guān)聯(lián)關(guān)系字段的 地方要加上,也就是ForeignKey地方加上on_delete=models.CASCADE

image.png

image.png

問題5:
model = ModelChoiceField(label=_(u'Target Model'), widget=exwidgets.AdminSelectWidget)
File "E:\workspace\SmartScientificResearchAssistant\xadmin\views\dashboard.py", line 284, in init
forms.Field.init(self, required, widget, label, initial, help_text,
TypeError: init() takes 1 positional argument but 6 were given

看到這里因為新的forms表單初始化只有一個參數(shù)坝咐,這里改為一個即可


image.png

問題6:
File "E:\workspace\SmartScientificResearchAssistant\xadmin\views\website.py", line 5, in <module>
from django.contrib.auth.views import login
ImportError: cannot import name 'login' from 'django.contrib.auth.views' (D:\ProgramData\Anaconda3\envs\myproject\lib\site-packages\django\contrib\auth\views.py)

將website.py中的
from django.contrib.auth.views import login
from django.contrib.auth.views import logout
替換為
from django.contrib.auth import authenticate,login,logout

問題7:
File "E:\workspace\SmartScientificResearchAssistant\xadmin\plugins\filters.py", line 10, in <module>
from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
ImportError: cannot import name 'QUERY_TERMS' from 'django.db.models.sql.query' (D:\ProgramData\Anaconda3\envs\myproject\lib\site-packages\django\db\models\sql\query.py)

將plugins 里的filters
中from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
替換為
from django.db.models.sql.query import LOOKUP_SEP,Query

問題8:
File "E:\workspace\SmartScientificResearchAssistant\xadmin\plugins\passwords.py", line 4, in <module>
from django.contrib.auth.views import password_reset_confirm
ImportError: cannot import name 'password_reset_confirm' from 'django.contrib.auth.views' (D:\ProgramData\Anaconda3\envs\myproject\lib\site-packages\django\contrib\auth\views.py)

xadmin\plugins\password.py 中的

from django.contrib.auth.views import password_reset_confirm
替換成
from django.contrib.auth.views import PasswordResetConfirmView

問題9:
File "D:\ProgramData\Anaconda3\envs\myproject\lib\site-packages\django\conf_init_.py", line 77, in getattr
val = getattr(self._wrapped, name)
AttributeError: 'Settings' object has no attribute 'MIDDLEWARE_CLASSES

將xadmin\plugins\language.py 中的
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES:
替換成
if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE:

修改后循榆,進行數(shù)據(jù)庫遷移,python make migrate
也就是實際開始操作數(shù)據(jù)庫和模型一致墨坚。


image.png

啟動服務(wù)
python manage.py runserver 0.0.0.0:9090
登錄問題:


image.png

修改views\website.py文件



![image.png](https://upload-images.jianshu.io/upload_images/19836142-ac6b07fd04065ed6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

問題11


image.png

解決方案:
將xadmin\util.py 中的86行 def vendor(*tags):方法體改為:

css = {'screen': []}
js = []
for tag in tags:
    file_type = tag.split('.')[-1]
    files = xstatic(tag)
    if file_type == 'js':
        js.extend(files)
    elif file_type == 'css':
        css['screen'] += files
return Media(css=css, js=js)

可以登錄了
先要創(chuàng)建是超級管理員 :python .\manage.py createsuperuser

image.png

左邊已經(jīng)有基礎(chǔ)結(jié)構(gòu)模型秧饮,接著就可增加自己設(shè)計的model了,然后可以進行界面管理


image.png

對使用的django包的forms下的boundfield.py進行注釋


image.png

問題


image.png

對類似的field.rel 改為field.remote_field
有幾個地方泽篮,可以批量替換
'ManyToManyField' object has no attribute 'rel'
同樣改成remote_field

image.png

改為model


image.png

同樣改成
remote_field

image.png

國際化問題
File "E:\workspace\SmartScientificResearchAssistant\xadmin\sites.py", line 349, in i18n_javascript
from django.views.i18n import javascript_catalog
ImportError: cannot import name 'javascript_catalog' from 'django.views.i18n' (D:\ProgramData\Anaconda3\envs\myproject\lib\site-packages\django\views\i18n.py)
新的django中 javascript_catalog 方法不存在導(dǎo)致盗尸,頁面js代碼執(zhí)行錯誤
xadmin里的sites.py可以改為


image.png

并且在setting里加上應(yīng)用


image.png

這下各個部分都可以了。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帽撑,一起剝皮案震驚了整個濱河市泼各,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亏拉,老刑警劉巖扣蜻,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異及塘,居然都是意外死亡弱贼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門磷蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溪烤,你說我怎么就攤上這事味咳。” “怎么了檬嘀?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵槽驶,是天一觀的道長。 經(jīng)常有香客問我鸳兽,道長掂铐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮全陨,結(jié)果婚禮上爆班,老公的妹妹穿的比我還像新娘。我一直安慰自己辱姨,他們只是感情好柿菩,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雨涛,像睡著了一般枢舶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上替久,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天凉泄,我揣著相機與錄音,去河邊找鬼蚯根。 笑死后众,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的稼锅。 我是一名探鬼主播吼具,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矩距!你這毒婦竟也來了拗盒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤锥债,失蹤者是張志新(化名)和其女友劉穎陡蝇,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哮肚,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡登夫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了允趟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恼策。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖潮剪,靈堂內(nèi)的尸體忽然破棺而出涣楷,到底是詐尸還是另有隱情,我是刑警寧澤抗碰,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布狮斗,位于F島的核電站,受9級特大地震影響弧蝇,放射性物質(zhì)發(fā)生泄漏碳褒。R本人自食惡果不足惜折砸,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沙峻。 院中可真熱鬧睦授,春花似錦、人聲如沸专酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祷肯。三九已至沉填,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佑笋,已是汗流浹背翼闹。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒋纬,地道東北人猎荠。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像蜀备,于是被迫代替她去往敵國和親关摇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355