Admin后台管理模塊的使用
Django的管理員模塊是Django的標准庫django.contrib的一部分。這個包還包括其它一些實用的模塊:
django.contrib.auth
django.contrib.sessions
django.contrib.comments
激活admin模塊的方法是:
1. 在INSTALLED_APPS設置文件中,加入'django.contrib.admin'
2. 再添加
'django.contrib.auth',
'django.contrib.contenttypes'
'django.contrib.sessions'
因為admin模塊依賴
3. 在MIDDLEWARE_CLASSES屬性中添加
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware'
'django.contrib.auth.middleware.AuthenticationMiddleware'.
也是因為依賴
4. 運行python manage.py syncdb,用於創建為admin等模塊創建新的數據庫表。
因為apps中有auth模塊,會要求你創建一個超級用戶。如果你取消這步,
也可以運行python manage.py createsuperuser。當且僅當,你安裝了auth模塊。
5. 在urls.py中設置admin映射
# Include these import statements...
from django.contrib import admin
admin.autodiscover()
# And include this URLpattern...
urlpatterns = patterns('',
# ...
(r'^admin/', include(admin.site.urls)),
# ...
)
6. 記住在你的模塊中增添admin模板文件,可以復制django自帶模板,注意在模塊路徑中添加
admin文件夾。
D:\Python27\Lib\site-packages\django\contrib\admin\templates\admin\base_site.html
7. 運行python manage.py runserver,網址中輸入
http://localhost:8000/admin/
8. admin界面默認是顯示英語,如果要顯示你需要的語言:
在MIDDLEWARE_CLASSES屬性中添加'django.middleware.locale.LocaleMiddleware',並確保它
排列在SessionMiddleware后面。重新刷新admin頁面
在admin頁面中管理models模塊:
1. 需要在你的app下創建一個admin.py文件,並對你的model類進行注冊
from django.contrib import admin
from mysite.books.models import Publisher, Author, Book
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
2. 當你在project文件夾中添加新的文件時,需要重啟server才能生效。
3. 如果想要你的admin界面中的添加數據功能生效,需要在MIDDLEWARE_CLASSES屬性中添加
'django.contrib.messages.middleware.MessageMiddleware',
自定義admin模塊的顯示
1. 取消在添加數據時,每一個字段都需要輸入的限制
在model類中做相應的修改就可以了:
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(
blank=True)
只需要在字段聲明中,設置blank=True,默認是False

關於NULL與空字符串的區別
在數據庫操作中,NULL和空字符串""是兩上不同的概念,有些數據庫類型即能接受NULL值,又能接受
空字符串類型,例如,varchar類型,到底什么時候使用這兩者,久而久之,容易造成數據的不一致,為
了避免這樣的情況,Django默認是把blank=True這樣的字段,統一做為空字符串插入到數據庫中。同
時,在創建數據表的時候,所有字段統一默認使用NOT NULL。
但是,當遇到時間,日期類型的時候,空字符串反而會出錯。這個時候,又需要使用NULL,只需要在model
字段聲明中加入:
publication_date = models.DateField(blank=True, null=True)
一旦你加入null=True聲明,這樣就相當於改變了數據庫表結構,類似SQL語句中的
alter table books_book modify publication_date date null;
然而之前說過,Django的python manage.py syncdb只能用表創建新表,不能更改表結構,所以這時你需要
在數據庫中進行更新表結構操作。

在admin界面的編輯頁面中,字段名字的顯示是根據model類中的變量名來顯示的,大寫第一個字母,把下划線改
成空格顯示出來。自定義顯示可以使用verbose_name參數
email = models.EmailField(blank=True, verbose_name='e-mail')
使用ModelAdmin來管理model在admin頁面中的顯示
- 自定義chanle list界面
ModelAdmin類似界面管理類,可以定義不同的顯示細節。用法如下:



from django.contrib
import admin
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')#把字段信息全部顯示出來
from mysite.books.models import Publisher, Author, Book
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')#把字段信息全部顯示出來
search_fields = ('first_name', 'last_name') #添加search bar,在指定的字段中search
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'publisher', 'publication_date')
list_filter = ('publication_date',)#頁面右邊會出現相應的過濾器選項
date_hierarchy = 'publication_date' #只接受日期類型的字段名
ordering = ('-publication_date',) #排序
admin. site.register(Publisher)
admin. site.register(Author, AuthorAdmin)
admin. site.register(Book, BookAdmin)
- 自定義edit form界面
fields = ('title', 'publisher', 'authors', 'publication_date') #edit界面就按這個順序顯示

還可以定義可編輯的字段
fields = ('title', 'authors', 'publisher')
這樣Django會自動給publication_data設置為null,記得null=True設置為null值

當遇到many-to-many的多選的字段類型時,Django自動提供上圖中的選擇方式,不過還可以
選擇用其它方式來進行多選,這種方式更加直觀,不過只能作用於many-to-many的多選字段,
不能應用於foreignkey字段。
filter_horizontal = ('authors',)

當然也有filter_vertical...

對於ForeighKey字段,也有相應的設置,用來輸入字段的ID,點擊邊上的
放大鏡圖標,也會彈出選擇框
raw_id_fields = ('publisher',)

關於用戶,組,權限
Django提供了很詳細的權限設置方案。包括對每一張表的控制權限。
