它不是為終端用戶準(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ì)象名稱等很有用。
安裝步驟:
-
pip install docutils
到 virtualenv - 將 django.contrib.admindocs 添加到 INSTALLED_APPS
- 將
(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