1. 安裝MySQL
1,安裝mysql:
sudo apt install mysql-server
? (安裝過程中輸入密碼并牢記)
?
2,安裝后進入mysql:
mysql -u用戶名 -p密碼
mysql -uroot -proot
?
3,在Django中配置和使用mysql數據庫
使用mysql數據庫,settings中配置如下:
DATABASES = {
? 'default': {
? ? ? 'ENGINE': 'django.db.backends.mysql',
? ? ? 'NAME': 'mydb',
? ? ? 'USER': 'root',
? ? ? 'PASSWORD': 'root',
? ? ? 'HOST': '127.0.0.1',
? ? ? 'PORT': '3306',
? }
}
4, 添加PyMySQL
然后使用pip添加依賴包: pip install PyMySQL
并在工程目錄下的__init__.py中添加以下代碼來配置PyMySQL:
import pymysql
pymysql.install_as_MySQLdb()
2. django admin后臺系統
Django中默認集成了后臺數據管理頁面,通過簡單的配置就可以實現模型后臺的Web控制臺。
管理界面通常是給系統管理員使用的,用來完成數據的輸入,刪除,查詢等工作。
使用以下models來示范admin后臺系統的用法。
?
創建一個項目, 用來說明出版社, 書籍和作者的關系。
? 假定關系:作者:書籍 => 1:n (一本書由一個作者完成, 一個作者可以創作多本書)
出版社:書籍 => n:n (一個出版社可以出版多本書, 一本書可以由多個出版社出版)
?
要求:
? 1. 創建作者author, 出版社publisher,書籍book三個應用.
? 2. 給每個應用分別創建首頁index.html,且可以在瀏覽器打開index頁面.
? 3. 在書籍的index.html中有一個"查看所有書籍"的超鏈接按鈕,點擊進入書籍列表list.html頁面.
? 4. 在書籍list.html中顯示所有書名,點擊書名可以進入書籍詳情detail.html
? 5. 在書籍detail.html中可以點擊該書的作者和出版社,進入作者的detail.html和出版社的detail.html頁面
?
models.py內容如下:
# 出版社
class Publisher(models.Model):
? ? ? name = models.CharField(max_length=30)
? ? ? address = models.CharField(max_length=100)
? ? ? city = models.CharField(max_length=30)
? ? ? state_province = models.CharField(max_length=30)
? ? ? country = models.CharField(max_length=20)
? ? ? website = models.URLField()
? ? ?
# 作者
class Author(models.Model):
? ? ? first_name = models.CharField(max_length=30)
? ? ? last_name = models.CharField(max_length=30)
? ? ? email = models.EmailField()
? ? ? gender = models.BooleanField(default=True)
?
# 書籍
class Book(models.Model):
? ? ? title = models.CharField(max_length=100)
? ? ? author = models.ForeignKey(Author)
? ? ? publishers = models.ManyToManyField(Publisher)
? ? ? publish_date = models.DateField()
?
使用admin后臺系統之前,需要先創建一個系統管理員,創建管理員之前需先同步數據庫。
python manager.py createsuperuser
設置為中文
settings中LANGUAGE_CODE = 'zh-hans'
設置時間,時區
TIME_ZONE='Asia/Shanghai'
?
添加自己的數據模型,在admin.py中注冊:
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)
在admin中給model添加數據。
給模型加上__str__函數,比如給Author模型添加str函數,讓author的顯示更加友好:
def __str__(self):
? return '%s %s' % (self.first_name, self.last_name)
?
希望控制admin中添加model數據時的動作,可以修改相應字段的屬性。
比如author的email字段運行添加的時候為空,可以在email字段定義中加上 blank=True(可以空白),
比如book的publication_date添加 blank=True, null=True(可以為null)屬性。
修改models屬性之后記得及時做數據遷移。
?
使用verbose_name屬性指定字段的別名:
? 比如給publisher的name字段指定一個中文的別名verbose_name='出版社名稱'。
在models的修改頁面,默認顯示的是models定義的str函數返回的字符串。
? ? ? ? ?
3. 定制admin
通過定義MoldelAdmin來定制model在admin的表現。比如給Author定義AuthorAdmin。
class AuthorAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'email')
相應的注冊代碼也要變化:
admin.site.register(Author, AuthorAdmin)
?
給Author添加一個搜索框:
search_fields = ('first_name', 'last_name')
給book添加一個過濾器
list_filter = ('publication_date',)
過濾器不光可以作用在日期字段上,還可以作用在boolean類型和外鍵上。
另一種增加日期過濾的方式:
date_hierarchy = 'publication_date'
字段排序:
ordering = ('-publication_date',)
修改編輯頁面顯示的字段及顯示順序,默認按照models中字段的定義順序顯示:
fields = ('title', 'authors', 'publisher', 'publication_date')
與fields相反的字段是exclude
exclude = ['publication_date',]
改善多對多關系中對象選擇操作,比如給BookAdmin添加如下屬性:
filter_horizontal = ('authors',)
filter_horizontal和filter_vertical 選項只適用于多對多關系。
?
一對多的外鍵關系,admin使用select box下拉菜單來表示。如不想用select box,可添加如下屬性,讓原來一次性加載所有publisher的select box變成填寫publisher的id:
raw_id_fields = ('publisher',)
?
讓字段分組顯示,fieldsets和上面提到的field不能同時出現:
fieldsets = (
? ('作者', {'fields': ('authors',)}),
? ('出版商', {'fields': ('publisher',)}),
)
?
定制list_display字段的顯示。比如給Author加一個布爾型gender字段,來表示性別。為了讓顯示更加人性化:
# 定制顯示屬性
? def showgender(self):
? ? ? if self.gender:
? ? ? ? ? return '男'
? ? ? else:
? ? ? ? ? return '女'
? list_display = ('first_name', 'last_name', 'email', showgender)
給該函數設置簡短描述,讓顯示更加友好:
showgender.short_description = '性別'
?
可以將modeladmin的屬性簡單劃分為列表頁屬性和添加、修改頁屬性
?
# 列表頁屬性
list_display,list_filter,search_fields,list_per_page等
?
# 添加、修改頁屬性
fields ,fieldsets, filter_horizontal, raw_id_fields等