python初試五
Django提供一個管理資料庫的app,即django.contrib.admin。這是Django最方便的功能之一。透過該app,我們可以直接經由web頁面,來管理我們的資料庫。這一工具,主要是為網站管理人員使用。
這個app通常已經預裝好,你可以在mysite/settings.py中的INSTALLED_APPS看到它。
預設介面
admin介面位於[site]/admin這個URL。這通常在mysite/urls.py中已經設定好。比如,下面是我的urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover() # admin
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)), # admin
url(r'^west/', include('west.urls')),
)
為了讓admin介面管理某個資料模型,我們需要先註冊該資料模型到admin。比如,我們之前在west中建立的模型Character。修改west/admin.py:
from django.contrib import admin
from west.models import Character
# Register your models here.
admin.site.register(Character)
訪問,登入後,可以看到管理介面:
這個頁面除了west.characters外,還有使用者和組資訊。它們來自Django預裝的Auth模組。我們將在以後處理使用者管理的問題。
複雜模型
管理頁面的功能強大,完全有能力處理更加複雜的資料模型。
先在west/models.py中增加一個更復雜的資料模型:
from django.db import models
# Create your models here.
class Contact(models.Model):
name = models.CharField(max_length=200)
age = models.IntegerField(default=0)
email = models.EmailField()
def __unicode__(self):
return self.name
class Tag(models.Model):
contact = models.ForeignKey(Contact)
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
這裡有兩個表。Tag以Contact為外部鍵。一個Contact可以對應多個Tag。
我們還可以看到許多在之前沒有見過的屬性型別,比如IntegerField用於儲存整數。
同步資料庫:
$python manage.py syncdb
在west/admin.py註冊多個模型並顯示:
from django.contrib import admin
from west.models import Character,Contact,Tag
# Register your models here.
admin.site.register([Character, Contact, Tag])
模型將在管理頁面顯示。
自定義頁面
我們可以自定義管理頁面,來取代預設的頁面。比如上面的"add"頁面。我們想只顯示name和email部分。修改west/admin.py:
from django.contrib import admin
from west.models import Character,Contact,Tag
# Register your models here.
class ContactAdmin(admin.ModelAdmin):
fields = ('name', 'email')
admin.site.register(Contact, ContactAdmin)
admin.site.register([Character, Tag])
上面定義了一個ContactAdmin類,用以說明管理頁面的顯示格式。裡面的fields屬性,用以說明要顯示的輸入欄。我們沒有讓"age"顯示。由於該類對應的是Contact資料模型,我們在註冊的時候,需要將它們一起註冊。
我們還可以將輸入欄分塊,給每一塊輸入欄以自己的顯示格式。修改west/admin.py為:
from django.contrib import admin
from west.models import Character,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([Character, Tag])
上面的欄目分為了Main和Advance兩部分。classes說明它所在的部分的CSS格式。這裡讓Advance部分收斂起來:
Advance部分旁邊有一個Show按鈕,用於展開。
Inline顯示
上面的Contact是Tag的外部鍵,所以有外部參考的關係。而在預設的頁面顯示中,將兩者分離開來,無法體現出兩者的從屬關係。我們可以使用Inline顯示,讓Tag附加在Contact的編輯頁面上顯示。
修改west/admin.py:
from django.contrib import admin
from west.models import Character,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([Character])
列表頁的顯示
在Contact輸入數條記錄後,Contact的列表頁看起來如下:
我們也可以自定義該頁面的顯示,比如在列表中顯示更多的欄目,只需要在ContactAdmin中增加list_display屬性:
from django.contrib import admin
from west.models import Character,Contact,Tag
# Register your models here.
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email') # list
admin.site.register(Contact, ContactAdmin)
admin.site.register([Character, Tag])
我們還可以為該列表頁增加搜尋欄。搜尋功能在管理大量記錄時非常有用。使用search_fields說明要搜尋的屬性:
from django.contrib import admin
from west.models import Character,Contact,Tag
# Register your models here.
class ContactAdmin(admin.ModelAdmin):
list_display = ('name','age', 'email')
search_fields = ('name',)
admin.site.register(Contact, ContactAdmin)
admin.site.register([Character])
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70026630/viewspace-3001536/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 初試PythonPython
- python初試Python
- python初試七Python
- python初試二Python
- python初試三Python
- python初試四Python
- python初試六Python
- 初學Python(五)——元組Python
- Python爬蟲初試Python爬蟲
- Python呼叫MySQL模組初試PythonMySql
- Python Scrapy 爬蟲(二):scrapy 初試Python爬蟲
- 初試
- 初試python的socket程式設計--ftpPython程式設計FTP
- Python 快速教程(Django01):初試天涯PythonDjango
- Kafka初試Kafka
- github 初試Github
- 初試 GithubGithub
- 初試Gevent – 高效能的Python併發框架Python框架
- 推薦五個好用的Python測試框架!Python框架
- 騰訊前端初試前端
- Rust: tokio初試Rust
- Vue + GraphQL初試Vue
- 初嘗試swiftSwift
- sqlite 小刀 初試SQLite
- 《Python從入門到實踐》第五章動手試一試Python
- Accessability 專案初試
- SAP UI5 初學者教程之五:檢視控制器初探 試讀版UI
- 初學PythonPython
- 初識pythonPython
- 標日初級-上 第五課
- 2020年焊工(初級)考試試題及焊工(初級)考試軟體
- PHP 初級 試崗要求PHP
- 初試MongoDB資料庫MongoDB資料庫
- 阿里雲IoT初試阿里
- Swift 3 0 FMDB 初試Swift
- 初試npm包釋出NPM
- 初試php中的curlPHP
- 【PL/SQL】初試 bulk collectSQL