標籤:django admin 管理工具
對於某類網站,管理介面是很重要的。他可以添加、編輯、刪除網站內容,但是建立管理介面繁瑣而重複,並且介面千篇一律;django用不能再少的代碼幫你做了這些繁瑣的工作:它讀取你模式中的中繼資料,然後提供給你強大並能立即工作的介面。
django.contrib是一套龐大的功能集,django基本代碼的組成部分,它包含:
使用者鑒別系統(django.contrib.auth)
支援匿名會話(django.contrib.sessioins)
使用者評註系統(django.contrib.comments)等等;
Django自動管理工具是django.contrib的一部分(即django.contrib.admin)。你可以在項目的 settings.py 中的INSTALLED_APPS看到它:
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/8C/04/wKioL1hfarOR84CsAAAUaeQkv3g956.png" title="1.png" alt="wKioL1hfarOR84CsAAAUaeQkv3g956.png" />
【配 置 admin 管 理 界 面】
激 活 管 理 界 面
Django管理網站是可選的,所以我們可以選擇開啟或關閉,1.10.0預設開啟,啟用步驟如下:
1、確認設定檔中INSTALLED_APPS內‘auth‘、‘contenttypes‘、‘sessions‘是開啟的,Django組態管理工具需要這3個包;
2、確認設定檔中MIDDLEWARE中‘django.middleware.common.CommonMiddleware‘、‘django.contrib.sessions.middleware.SessionMiddleware‘、‘django.contrib.auth.middleware.AuthenticationMiddleware‘是開啟的。
3、建立帳號:python manage.py createsuperuser
Username (leave blank to use ‘root‘): django
Email address: [email protected]
Password:
Password (again):
Superuser created successfully. (上節同步資料庫時產生了auth等資料庫表,可查看)
4、將urls.py中的admin訪問路徑注釋取消,預設是開啟的。
5、啟動程式開發伺服器,訪問http://10.0.18.33:8002/admin/
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/8C/08/wKiom1hfawaS46oOAABYUktsBls035.png" title="2.png" style="width:700px;height:254px;" alt="wKiom1hfawaS46oOAABYUktsBls035.png" width="700" vspace="0" hspace="0" height="254" border="0" />
附加:如果你想讓介面變成中文,在設定檔的MIDDLEWARE內添加‘django.middleware.locale.LocaleMiddleware‘(這是一個中介軟體),一定要放在‘django.contrib.sessions.middleware.SessionMiddleware‘後面。
注 冊 模 型 modle 到 管 理 界 面
vim ~/HelloWorld/mysql_django/admin.py
from django.contrib import admin**from mysql_django.models import Publisher, Author, Book**admin.site.register(Publisher) #將Publisher模組註冊到管理工具**admin.site.register(Author)**admin.site.register(Book)
完成後,再次訪問,如果沒出現重啟下server,然後點點點建立編輯刪除,並去理解Books模組與authors的多對多、與publisher外鍵的關係。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/8C/08/wKiom1hfa6uATUEWAABX195lty8039.png" title="3.png" style="width:700px;height:361px;" alt="wKiom1hfa6uATUEWAABX195lty8039.png" width="700" vspace="0" hspace="0" height="361" border="0" />
【admin 管 理 界 面 優 化】
自 定 義 模 塊 類 顯 示
vim ~/HelloWorld/mysql_django/models.py
.................class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)**# email = models.EmailField(blank=True)** email = models.EmailField(blank=True,verbose_name=‘e-mail‘)**= email = models.EmailField(‘e-mail‘, blank=True) def __unicode__(self): return u‘%s %s‘ % (self.first_name,self.last_name)class Book(models.Model): title = models.CharField(max_length=50) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher)** publication_date = models.DateField(blank=True, null=True) def __unicode__(self): return self.title
代碼解讀:
1、blank=True 設定欄位可選填,預設我們要為表單填寫每一欄位;
2、verbose_name=‘e-mail‘ 設定web介面欄位標籤,預設標籤首字母大寫、空格替代底線。
附加:**= 是固定位置的參數傳遞,等上;但不適於ManyToManyField 和ForeignKey欄位,因為他們第一參數必須是模組類。
3、blank=True 和 null=True 設定日期型(DateField、TimeField、DateTimeField)或數字型(IntegerField、DecimalField、FloatField)欄位可選填。添加null=True比添加blank=True要複雜。前者改變了資料的定義,即create table時去掉了此欄位上的not null,因此我們還要更新資料庫:
檢查文法:python manage.py check
產生遷移檔案:python manage.py makemigrations mysql_django
同步檔案至資料庫:python manage.py migrate
轉換成SQL語句查看:python manage.py sqlmigrate mysql_django 0003
附加:在SQL中,NULL值不同於Null 字元串,就像Python中None不同於Null 字元串。為了消除歧義,django預設為每個欄位開始一直都加了NOT NULL,在管理工具中,你留空一個字串,它會為此插入Null 字元串(不是NULL)。
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/8C/04/wKioL1hfbIKA0nqoAACX0q2L0pI873.png" title="4.png" style="width:700px;height:357px;" alt="wKioL1hfbIKA0nqoAACX0q2L0pI873.png" width="700" vspace="0" hspace="0" height="357" border="0" />
以上是對模組層級別的修改,如果針對管理工具層級的的特別模組修改則用ModelAdmin classes。
自 定 義 ModelAdmin 類 顯 示
上一節我們在Author模組定義的unicode方法返回顯示了first_name和last_name,我們繼續改進
vim ~/HelloWorld/mysql_django/admin.py
from django.contrib import adminfrom mysql_django.models import Publisher, Author, Book# Register your models here.**class AuthorAdmin(admin.ModelAdmin):** list_display = (‘first_name‘, ‘last_name‘, ‘email‘)** search_fields = (‘first_name‘, ‘last_name‘)**class BookAdmin(admin.ModelAdmin):** list_display = (‘title‘, ‘publisher‘, ‘publication_date‘)** list_filter = (‘publication_date‘,)** date_hierarchy = ‘publication_date‘** ordering = (‘-publication_date‘,)** fields = (‘title‘, ‘authors‘, ‘publisher‘)** filter_horizontal = (‘authors‘,)** raw_id_fields = (‘publisher‘,)admin.site.register(Publisher)**admin.site.register(Author,AuthorAdmin)**admin.site.register(Book,BookAdmin)
代碼解讀:
1、建立AuthorAdmin和BookAdmin類,從django.contrib.admin.ModelAdmin派生出來的子類,供管理工具使用;
2、list_display定義欄位名稱的元組,用於列表顯示;
3、search_fields 以first_name/last_name定義快速查詢欄;
4、list_filter 建立日期型捷徑過濾器,包含今天、過往七天等;
5、date_hierarchy 另一種時間過濾器,顯示不如上個直觀;
6、ordering 設定預設以publication_date的時間降序排列;
6、admin.site.register(Author/Book)後面添加了xxxxAdmin。可以理解: 用xxxAdmin選項註冊xxxxx模組;
7、admin.site.register()函數接受ModelAdmin子類作第二參數,無第二參數則使用預設選項,如Publisher;
8、fields 定義表單(下章細講),它隱藏了publication_date欄位,限制了使用者去更改它;
9、filter_horizontal 針對多對多欄位的更個人化的選擇刪除,filter_vertical 和他一樣,顯示方式不一樣,看個人喜好;
10、raw_id_fields 跳轉新視窗選擇外鍵欄位,預設是下拉框,但如果publisher記錄過多,裝載並顯示在下拉框會很費時;
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/8C/04/wKioL1hfbUuyDjzTAAFUd9vZtkw671.png" title="5.png" style="width:700px;height:285px;" alt="wKioL1hfbUuyDjzTAAFUd9vZtkw671.png" width="700" vspace="0" hspace="0" height="285" border="0" />
【淺 析 admin 原理、目的、許可權】
admin 如 何 工 作
1、django從urls.py引導URLconf,執行admin.autodiscover() 語句,函數遍曆INSTALLED_APPS,尋找admin.py檔案;
2、找到admin.py後,admin.site.register()註冊模組,管理工具為註冊過的顯示一個編輯/修改介面;
3、Users和Groups源於應用程式django.contrib.auth自身的admin.py。
管 理 界 面 目 的
提供給非技術使用者輸入他們的資料。
使用者、組、許可權
以上因為我們是用超級使用者登陸的,所以能建立、編輯、刪除任何對象。但實際環境中顯然是不能這樣的,後面我們將詳解使用者權限與配置。首先這有一組布爾型標誌:
1、活動標誌:控制使用者是否已啟用,若為關閉狀態,即使密碼正確也無法登陸;
2、成員標誌:控制使用者是否可登陸管理介面,區分公眾使用者(編輯控制公眾介面)和系統管理使用者(編輯控制管理頁面)
3、超級使用者標誌:賦予使用者在管理介面所有許可權,若賬戶有這標誌,所有許可權將被忽略。
注意:在建立使用者時,我們定義使用者權限,而許可權是定義在模組層級別,而不是對象層級;比如可以讓小強修改任何圖書,但不能讓他修改機械工業出版的圖書;
不能賦給使用者修改使用者權限的許可權,否則他可以讓自己變成超級管理員;最好為一個組分配使用者,管理起來方便。
---------------------------------------------------------------------------------------------------
望和大家分享進步。如有不對之處,請多多指點。
本文出自 “北冰--Q” 部落格,請務必保留此出處http://beibing.blog.51cto.com/10693373/1885945
Django -- admin管理工具