Django安裝及簡單使用1.5
代碼都在github:
URL:https://github.com/njxshr/codes/tree/master/testdj
Django Admin 管理工具
Django 提供了基于 web 的管理工具。
- Django 自動管理工具是 django.contrib 的一部分衣式。你可以在項目的 settings.py 中的 INSTALLED_APPS 看到它:
NSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'TestModel',
]
激活管理工具
- 通常我們在生成項目時會在 urls.py 中自動設置好惶翻,我們只需去掉注釋即可申屹。
配置項如下所示:
# urls.py
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
]
管理登錄界面
設置超級管理員
python manage.py createsuperuser
依次設置賬號
使用管理工具
-
啟動開發(fā)服務器仗阅,然后在瀏覽器中訪問 http://127.0.0.1:8000/admin/,得到如下界面:
登錄后效果 -
為了讓 admin 界面管理某個數(shù)據(jù)模型嗡害,我們需要先注冊該數(shù)據(jù)模型到 admin奴拦。比如,我們之前在 TestModel 中已經(jīng)創(chuàng)建了模型 Test 垃僚。修改 TestModel/admin.py:
訪問效果
自定義表單
我們可以自定義管理頁面集绰,來取代默認的頁面。比如上面的 "add" 頁面谆棺。我們想只顯示 name 和 email 部分栽燕。修改 TestModel/admin.py:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
class ContactAdmin(admin.ModelAdmin):
fields = ('name', 'email')
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test, Tag])
-
以上代碼定義了一個 ContactAdmin 類,用以說明管理頁面的顯示格式改淑。
里面的 fields 屬性定義了要顯示的字段碍岔。
由于該類對應的是 Contact 數(shù)據(jù)模型,我們在注冊的時候朵夏,需要將它們一起注冊蔼啦。顯示效果如下:
image.png - 我們還可以將輸入欄分塊,每個欄也可以定義自己的格式仰猖。修改 TestModel/admin.py為:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
class ContactAdmin(admin.ModelAdmin):
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',), # CSS
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test, Tag])
- 上面的欄目分為了 Main 和 Advance 兩部分捏肢。classes 說明它所在的部分的 CSS 格式。這里讓 Advance 部分隱藏:
image.png
image.png
內聯(lián)(Inline)顯示
- 上面的 Contact 是 Tag 的外部鍵饥侵,所以有外部參考的關系鸵赫。
而在默認的頁面顯示中,將兩者分離開來躏升,無法體現(xiàn)出兩者的從屬關系辩棒。我們可以使用內聯(lián)顯示,讓 Tag 附加在 Contact 的編輯頁面上顯示。
修改TestModel/admin.py:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
image.png
列表頁的顯示
在 Contact 輸入數(shù)條記錄后一睁,Contact 的列表頁看起來如下:
image.png
- 我們也可以自定義該頁面的顯示藕赞,比如在列表中顯示更多的欄目,只需要在 ContactAdmin 中增加 list_display 屬性:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email') # list
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
- 搜索功能在管理大量記錄時非常有卖局,我們可以使用 search_fields 為該列表頁增加搜索欄:
from django.contrib import admin
from TestModel.models import Test,Contact,Tag
# Register your models here.
class TagInline(admin.TabularInline):
model = Tag
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email') # list
search_fields = ('name',)
inlines = [TagInline] # Inline
fieldsets = (
['Main',{
'fields':('name','email'),
}],
['Advance',{
'classes': ('collapse',),
'fields': ('age',),
}]
)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Test])
- 在本實例中我們搜索了 name 為 runoob 的記錄斧蜕,顯示結果如下:
image.png
提示
如果from TestModel.models import Test,Contact,Tag
引入不成功 則去掉TestModel.
寫
from models import Test,Contact,Tag