1、啓動django站點管理功能web
一、關於django.contrib包數據庫
包含了django自帶的衆多附加組件,主要包括:django
1)管理工具: django.contrib.adminsession
2)用戶鑑別系統:django.contrib.authapp
3)支持匿名會話:django.contrib.sessions工具
4)用戶評註系統:django.contrib.commentsspa
二、settings.py中啓動管理工具所須要的包翻譯
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', #'django.contrib.messages', #'django.contrib.staticfiles', 'django_manage_app', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', #'django.contrib.messages.middleware.MessageMiddleware', #'django.middleware.clickjacking.XFrameOptionsMiddleware', )
三、建立管理工具所須要的「額外表」code
ctrl+alt+rorm
syncbd
四、建立超極用戶
1)系統建表後繼續建立超極用戶
2)pyCharm中後續使用命令建立
ctrl+alt+r
createsuperuser
密碼:admin
說明:只有當INSTALLED_APPS中包含了django.contrib.auth時,
createsuperuser命令才能夠使用。
createsuperuser建立的用戶沒法正常登陸( 建立出錯致使密碼錯誤)。
能夠用admin帳號手動修改密碼:
須要安裝:'django.contrib.messages.middleware.MessageMiddleware',
3)admin登陸以後
PS:因爲尚未建立任何模塊,如今只有「用戶組」和「用戶」兩個基本模塊。
五、管理界面翻譯成中文
添加:'django.middleware.locale.LocaleMiddleware',
MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', #'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.locale.LocaleMiddleware', )
執行結果:
六、關於頁面沒有被渲染的處理辦法
屢次調整如下注釋掉的包,最終仍是註釋掉:(緣由待定)
最終頁面效果:
2、將本身定義models添加到管理界面中
一、未添加自定義models前:
二、源碼:
models.py:
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField() def __unicode__(self): return u'%s, %s'%(self.name,self.country) class Meta: ordering = ['-name'] class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField()
def __unicode__(self):
return u'%s, %s, %s, %s'%(self.id,self.first_name,
self.last_name,self.email) class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() def __unicode__(self): return self.title
admin.py:
from django.contrib import admin from django_manage_app.models import Publisher,Author,Book # Register your models here. admin.site.register(Publisher) admin.site.register(Author) admin.site.register(Book)
三、進入管理界面
四、手工添加數據
1)添加3個author
2)添加2個publisher
3)添加book
Authors:多對多
publisher:外鍵
數據庫中的存儲狀況:
use django_db; select * from django_manage_app_book; select * from django_manage_app_book_authors;
執行結果:
3、字段的一些設置
一、容許某個字段爲空
不容許爲空時:
容許爲空:
class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField(blank=True)
注:此處數據庫中的author表的結構並無被改變,email字段仍是not null,
只是存入了「空字符串」,只是django代碼層的容許爲空檢查經過了。
二、「NULL值」 與 「容許某個字段爲空」
字符串型:不存在NULL,留空時系統自動錄入「空字符串」
日期類型:DateField,TimeField,DateTimeField
不接受「空字符串」,錄入"NULL值"
留空時必須註明(blank=True, null=True)
數字類型:IntegerField,DecimalField,FloatField
不接受「空字符串」,錄入"NULL值"
留空時必須註明(blank=True, null=True)
eg:
class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField(blank=True, null=True)
注:實際上此時數據庫中的結構沒有被改變,仍是not null
三、字段別名的使用
class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField(blank=True,verbose_name='電子郵件')
四、自定義「顯示字段」,「搜索字段」
可點擊顯示字段名進行排序
自定義顯示字段前:默認使用__unicode__方法
class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField(blank=True,verbose_name='電子郵件') def __unicode__(self): return u'%s, %s, %s, %s'%(self.id,self.first_name, self.last_name,self.email)
自定義「顯示字段」,「搜索字段」:
admin.py
#coding:utf8 from django.contrib import admin from django_manage_app.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') admin.site.register(Publisher) admin.site.register(Author,AuthorAdmin) admin.site.register(Book)
執行結果:
五、自定「篩選字段」
class BookAdmin(admin.ModelAdmin): list_display = ('title', 'publisher', 'publication_date') list_filter = ('publication_date',) admin.site.register(Publisher) admin.site.register(Author,AuthorAdmin) admin.site.register(Book,BookAdmin)
執行結果:
字段分層篩選(結果集升序):
class BookAdmin(admin.ModelAdmin): list_display = ('title', 'publisher', 'publication_date') date_hierarchy = 'publication_date' ordering = ('publication_date',)
時間篩選導航條會逐層深刻,從年,到月,到日
date_hierarchy只接收字符串,而不是元組,只能對一個字段進行按層次篩選
五、其餘
1)新增記錄時,字段的顯示順序,哪些可編輯
2)多對多字段的備選記錄數不少時
3)外鍵字段備選記錄不少時