使用 Django Admin

它不是為終端用戶準(zhǔn)備的泳挥,它是為網(wǎng)站管理員準(zhǔn)備的

使用 Admin 定制 vs 創(chuàng)建新的視圖

相比于對(duì) Django Admin 進(jìn)行大量定制竭望,通常創(chuàng)建一個(gè)相同功能的新視圖會(huì)更簡(jiǎn)單若河。

對(duì)象的數(shù)據(jù)庫(kù)表示

最佳實(shí)踐:

  • 對(duì)每個(gè) Django 數(shù)據(jù)模型都要實(shí)現(xiàn)其 str_ 方法气忠,如果使用 python 2.7炕吸,使用 django.utils.encoding.python_2_unicode_compatible 裝飾器第租。
  • 如果在數(shù)據(jù)模型的 admin 列表中還要顯示其它的對(duì)象屬性,使用 list_display般眉。

實(shí)現(xiàn) str()__ 非常簡(jiǎn)單:

from django.db import models
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible # For Python 3.4 and 2.7
class IceCreamBar(models.Model):
    name = models.CharField(max_length=100)
    shell = models.CharField(max_length=100)
    filling = models.CharField(max_length=100)
    has_stick = models.BooleanField(default=True)

    def __str__(self):
        return self.name

對(duì)于 Python2.7了赵,如果沒有添加 str() 方法,Django 默認(rèn)會(huì)提供一個(gè) unicode() 方法甸赃。

list_display 的使用示例如下:

from django.contrib import admin

from .models import IceCreamBar

class IceCreamBarAdmin(admin.ModelAdmin):
    list_display = ("name", "shell", "filling",)

admin.site.register(IceCreamBar, IceCreamBarAdmin)

在 ModelAdmin 類中添加可調(diào)用對(duì)象

為數(shù)據(jù)模型實(shí)例添加一個(gè)目標(biāo)鏈接:

from django.contrib import admin
from django.core.urlresolvers import reverse
from django.utils.html import format_html

from icecreambars.models import IceCreamBar

class IceCreamBarAdmin(admin.ModelAdmin):

    list_display = ("name", "shell", "filling",)
    readonly_fields = ("show_url",)

    def show_url(self, instance):
        url = reverse("ice_cream_bar_detail",
                    kwargs={"pk": instance.pk})
        response = format_html("""<a href="{0}">{1}</a>""", url, url)
        return response

    show_url.short_description = "Ice Cream Bar URL"
    # Displays HTML tags
    # Never set allow_tags to True against user submitted data!!!
    show_url.allow_tags = True

admin.site.register(IceCreamBar, IceCreamBarAdmin)

由于 allow_tags 能將內(nèi)容解析成 HTML 顯示柿汛,存在安全隱患,故不要在用戶提交的內(nèi)容項(xiàng)上使用埠对。

不在多用戶環(huán)境下使用 list_editable

django.contrib.admin 中當(dāng)使用 list_editable 時(shí)络断,普通 admin 列表視圖會(huì)轉(zhuǎn)成表單,使得管理員能同時(shí)編輯多條記錄项玛。但是貌笨,這些記錄不是由其主鍵值標(biāo)識(shí)的,而是通過其排列位置標(biāo)識(shí)襟沮,因此锥惋,當(dāng)有多個(gè)管理員同時(shí)進(jìn)行編輯時(shí),會(huì)出現(xiàn)錯(cuò)誤开伏。這是一個(gè)已知的 BUG膀跌。

Django Admin 文檔生成器

django.contrib.admindocs 包能檢查項(xiàng)目中的各組件,如數(shù)據(jù)模型硅则、視圖淹父、自定義模板 Tag 和自定義過濾器等,并自動(dòng)生成文檔怎虫。它對(duì)于查看項(xiàng)目的體系結(jié)構(gòu)暑认、對(duì)象名稱等很有用。

安裝步驟:

  1. pip install docutils 到 virtualenv
  2. 將 django.contrib.admindocs 添加到 INSTALLED_APPS
  3. (r'^admin/doc/', include('django.contrib.admindocs.urls') 添加到根 URLConf大审。確保添加到 r'^admin/' 項(xiàng)目前

之后蘸际,通過 /admin/doc/ 即可訪問。

加強(qiáng) Django Admin 和 Django Admin Docs 的安全措施

使用自定義皮膚樣式

相關(guān)皮膚包:

  • django-grappelli: 穩(wěn)定徒扶、健壯
  • django-suit: 基于 Bootstrap粮彤,相對(duì)較新
  • django-admin-bootstrapped: 基于 Bootstrap

更多包,見 admin-styling

定制皮膚包是非常困難的姜骡,因此考慮評(píng)估使用第三方已實(shí)現(xiàn)的包导坟。

評(píng)估點(diǎn): 有沒有好文檔

如果自己定制,那么對(duì)每個(gè)定制的 Admin 擴(kuò)展都要寫測(cè)試

參考文獻(xiàn): Two Scoops of Django: Best Practices for Django 1.8

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圈澈,一起剝皮案震驚了整個(gè)濱河市惫周,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌康栈,老刑警劉巖递递,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喷橙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡登舞,警方通過查閱死者的電腦和手機(jī)贰逾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菠秒,“玉大人疙剑,你說我怎么就攤上這事』海” “怎么了核芽?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)酵熙。 經(jīng)常有香客問我轧简,道長(zhǎng),這世上最難降的妖魔是什么匾二? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任哮独,我火速辦了婚禮,結(jié)果婚禮上察藐,老公的妹妹穿的比我還像新娘皮璧。我一直安慰自己,他們只是感情好分飞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布悴务。 她就那樣靜靜地躺著,像睡著了一般譬猫。 火紅的嫁衣襯著肌膚如雪讯檐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天染服,我揣著相機(jī)與錄音别洪,去河邊找鬼。 笑死柳刮,一個(gè)胖子當(dāng)著我的面吹牛挖垛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秉颗,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痢毒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蚕甥?” 一聲冷哼從身側(cè)響起闸准,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梢灭,沒想到半個(gè)月后夷家,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敏释,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年库快,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钥顽。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡义屏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜂大,到底是詐尸還是另有隱情闽铐,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布奶浦,位于F島的核電站兄墅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏澳叉。R本人自食惡果不足惜隙咸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望成洗。 院中可真熱鬧五督,春花似錦、人聲如沸瓶殃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遥椿。三九已至基矮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間修壕,已是汗流浹背愈捅。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慈鸠,地道東北人蓝谨。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像青团,于是被迫代替她去往敵國(guó)和親譬巫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容