您好,登錄后才能下訂單哦!
一 前言
在第(二)節(jié)介紹了模型Book的設(shè)計(jì),實(shí)質(zhì)就是在models.py里寫了一個(gè)Book類,定義了變量和元數(shù)據(jù),也就是設(shè)計(jì)數(shù)據(jù)庫里對(duì)應(yīng)的表應(yīng)該長(zhǎng)什么樣子。就如前面所說,你可以將定義的模型類理解成數(shù)據(jù)庫的一張表,類的實(shí)例對(duì)象理解成表中一行數(shù)據(jù),類中的變量對(duì)應(yīng)表中字段。Python奉行代碼優(yōu)先的理念,通過定義模型類,實(shí)現(xiàn)python代碼與數(shù)據(jù)庫操作的解耦,即使Python開發(fā)者不會(huì)數(shù)據(jù)庫SQL,也能輕松完成數(shù)據(jù)庫操作。
模型類定義完后,如何實(shí)現(xiàn)在數(shù)據(jù)庫生成對(duì)應(yīng)的表呢?如何通過Django后臺(tái)管理模型呢?這就是本節(jié)要回答的問題。
二 模型遷移
遷移(migration),是一個(gè)將models.py定義的模型類映射到數(shù)據(jù)庫并生成數(shù)據(jù)表的動(dòng)作,主要涉及兩個(gè)命令:
python manage.py makemigrations python manage.py migrate
命令說明:
1. 該命令的執(zhí)行位置是在manage.py文件的同級(jí)目錄;
2. 命令順序執(zhí)行,即先執(zhí)行makemigrations,完成后,再執(zhí)行migrate;
3. Django默認(rèn)使用SQLlite,不需要做任何配置,但如果使用的其他數(shù)據(jù)庫,需要預(yù)先在項(xiàng)目的settings.py配置、指定數(shù)據(jù)庫;
可能你會(huì)疑惑,遷移為什么要搞成兩步呀?
原因是這樣的:
makemigrations命令,帶著make,該動(dòng)作只是將模型改動(dòng)生成到文件,默認(rèn)是在項(xiàng)目的migrations目錄下,注意此時(shí)只是生成了一個(gè)可讀可編輯的文本文件,并沒有對(duì)數(shù)據(jù)庫進(jìn)行改動(dòng),這樣做的目的是,便于通過版本控制系統(tǒng)(如git、svn)記錄、同步你對(duì)模型的修改,畢竟版本控制系統(tǒng)是無法和數(shù)據(jù)庫打交道的。有了中間記錄,就可以放心的使用migrate將改動(dòng)同步到數(shù)據(jù)庫了。
三 通過Admin后臺(tái)管理模型
Django的省心之處就是它會(huì)基于項(xiàng)目模型創(chuàng)建一套簡(jiǎn)易的后臺(tái)管理系統(tǒng),通過該系統(tǒng)可以方便的對(duì)模型進(jìn)行增刪改查,雖然也被很多人詬病,Django太重、集成度太強(qiáng),但既然有現(xiàn)成的、省事兒的,為啥還要自己造輪子呢?!
進(jìn)入Admin后臺(tái)管理的步驟如下:
1. 首次登錄,創(chuàng)建一個(gè)admin站點(diǎn)用戶,命令如下:
python manage.py createsuperuser
根據(jù)提示輸入用戶名、郵箱地址、密碼即可。
2. 啟動(dòng)服務(wù)器,命令如下:
python manage.py runserver 127.0.0.1:8000
IP:端口根據(jù)實(shí)際修改,啟動(dòng)后,瀏覽器訪問http://127.0.0.1:8000/admin/,就會(huì)看到管理后臺(tái)界面,如圖:
上圖中管理后臺(tái)登錄界面的站點(diǎn)名字已經(jīng)被我從默認(rèn)的Django Administration改成圖書借閱管理系統(tǒng)了,后面會(huì)介紹如何改。
3. 在amdin.py中使用admin.site.register()注冊(cè)模型
from django.contrib import admin from django.contrib.auth.models import Group,User as AdminUser from .models import Book,User,ValidUser # Register your models here. admin.site.register(Book)
注意:
只有注冊(cè)的模型才會(huì)出現(xiàn)在admin后臺(tái)管理系統(tǒng)。
4. 再次進(jìn)入管理后臺(tái)界面,發(fā)現(xiàn)模型book已經(jīng)出現(xiàn)在管理后臺(tái),如圖:
此時(shí),你可能會(huì)發(fā)現(xiàn)模型名字怎么變成圖書了,還記得在(二)節(jié)中設(shè)計(jì)模型用的verbose_name = '圖書'吧,就是這個(gè)效果。
四 定制Admin后臺(tái)
通過上述步驟,已經(jīng)可以在admin管理后臺(tái)看到定義的模型了,后臺(tái)頁面顯示和布局都是默認(rèn)的,Django提供了ModelAdmin類實(shí)現(xiàn)對(duì)模型展示的定制,如下是對(duì)BOOK模型進(jìn)行的簡(jiǎn)單定制:
@admin.register(Book) class BookAdmin(admin.ModelAdmin): list_display = ('book_name','author_name','total_num','available_num','book_img') #readonly_fields = ('book_name','author_name','total_num','available_num') search_fields = ('book_name','author_name') list_filter = ['available_num'] list_per_page = 10 admin.AdminSite.site_header = '圖書借閱管理系統(tǒng)' admin.AdminSite.site_title = '管理后臺(tái)'
說明:
1. 直接可以按照以上代碼套路定制自己的后臺(tái),首先定義一個(gè)ModelAdmin的子類BookAdmin,在該子類里定制展示效果和特性,同時(shí)使用admin.register裝飾器,接收的參數(shù)就是需要定制的模型;
2. 常用定制字段說明如下:
1) list_display: 顯示在頁面的字段;
2)readonly_fields: 指定哪些字段是只讀類型;
3)search_fields: 在頁面添加搜索框,且指定按哪些字段進(jìn)行搜索;
4)list_per_page: 設(shè)置每頁顯示多少個(gè)對(duì)象,如果超過,會(huì)進(jìn)行分頁;
5)admin.AdminSite.site_header:設(shè)置站點(diǎn)頁頭
6)admin.AdminSite.site_title: 設(shè)置頁面標(biāo)題
7)list_filter:過濾頁面元素
簡(jiǎn)單定制后,效果如下:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。