一 前言
創(chuàng)新互聯(lián)公司成立于2013年,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元平魯做網(wǎng)站,已為上家服務(wù),為平魯各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):18980820575在上一篇文章需求分析中,已經(jīng)大致說(shuō)明了為什么要開(kāi)發(fā)圖書(shū)借閱管理系統(tǒng)、系統(tǒng)應(yīng)該具備哪些角色或行為、系統(tǒng)如何工作等,對(duì)該系統(tǒng)應(yīng)該有了大致的印象,那接下來(lái)的文章就是介紹如何一步步實(shí)現(xiàn)。
本文將介紹開(kāi)發(fā)圖書(shū)借閱管理系統(tǒng)的第一步,也是關(guān)鍵的一步—模型設(shè)計(jì)。如果將系統(tǒng)精簡(jiǎn),它符合輸入-》驅(qū)動(dòng)-》輸出的模型,具體而言,系統(tǒng)收到http請(qǐng)求(輸入),對(duì)請(qǐng)求進(jìn)行處理(驅(qū)動(dòng),即邏輯處理+數(shù)據(jù)庫(kù)操作),然后將處理的結(jié)果返回前端(輸出),所以在這個(gè)模型里,重點(diǎn)是驅(qū)動(dòng)部分(Django名詞:視圖)。乍一看,好像是偏題了,明明說(shuō)的是Django的模型(model),怎么又扯到視圖(view)了。其實(shí),這里是想把本就緊密的概念先引入進(jìn)來(lái),混個(gè)眼熟,更重要的是,好的模型設(shè)計(jì)既能適應(yīng)未來(lái)的功能擴(kuò)展,又能提升性能,是系統(tǒng)開(kāi)發(fā)的基礎(chǔ)。要知道,你設(shè)計(jì)了什么樣的模型,數(shù)據(jù)就按什么樣子去存、去取。
二 模型設(shè)計(jì)思路
根據(jù)上一篇文章的分析,系統(tǒng)需要維護(hù)兩類(lèi)數(shù)據(jù),即圖書(shū)信息和用戶(hù)借閱信息,相應(yīng)的,我們?cè)O(shè)計(jì)兩個(gè)模型,圖書(shū)模型和用戶(hù)借閱模型。至于如何設(shè)計(jì)模型,需要根據(jù)業(yè)務(wù)需要進(jìn)行分析,就拿圖書(shū)模型而言,可以做如下分析:
1.模型需要有哪些字段?
首先要搞明白的是,在Django里,模型model相對(duì)于數(shù)據(jù)庫(kù)的一種表,模型中的每個(gè)變量,相當(dāng)于表中的列,因?yàn)镈jango內(nèi)置ORM,所以,可以不需要考慮如何建表,如何寫(xiě)sql進(jìn)行數(shù)據(jù)操作,一切就奉行python的編寫(xiě)習(xí)慣。
那么,圖書(shū)模型至少需要有以下字段吧:
1) 書(shū)名,用于標(biāo)識(shí)圖書(shū);
2)作者名,用于標(biāo)識(shí)圖書(shū),畢竟同名書(shū)籍還是很多的;
3)圖書(shū)總冊(cè)數(shù),作為管理系統(tǒng),需要知道該圖書(shū)總共有多少冊(cè)吧;
4)圖書(shū)可借冊(cè)數(shù),作為借閱系統(tǒng),需要知道該圖書(shū)是否可借,有多少本可借;
5)封面圖,來(lái)張圖書(shū)靚照,前端頁(yè)面不枯燥;
.... 大致,主要的就這么多了,當(dāng)然,可以根據(jù)業(yè)務(wù)需要繼續(xù)拓展,如圖書(shū)分類(lèi),圖書(shū)所屬等等,重在思路,就不在此一一展開(kāi)了。
2.是否需要設(shè)計(jì)主鍵或索引?
如果模型未指定主鍵,Django會(huì)幫忙增加一個(gè)自增加的ID字段作為主鍵,主鍵是唯一索引的,在我們的場(chǎng)景里,任何一個(gè)字段值都有可能重復(fù)的,所以不設(shè)計(jì)自定義的主鍵了,就交給Django打理吧,需要索引查詢(xún)時(shí),就用ID。
3.是否需要設(shè)計(jì)外鍵?
Django有三種外鍵關(guān)系,即一對(duì)一、多對(duì)一、多對(duì)多,理解起來(lái)是這樣的,一對(duì)一就好比員工和員工號(hào)的關(guān)系,一個(gè)員工只有一個(gè)員工號(hào),一個(gè)員工號(hào)也只對(duì)應(yīng)一個(gè)員工;多對(duì)一,比如工廠(chǎng)和汽車(chē)的關(guān)系,一個(gè)工廠(chǎng)可以生產(chǎn)很多汽車(chē),一臺(tái)汽車(chē)由一個(gè)工廠(chǎng)生產(chǎn);多對(duì)多呢,也很常見(jiàn),比如,一本書(shū)可以有多個(gè)作者,一個(gè)作者也可以寫(xiě)多本書(shū);
把三種關(guān)系套在我們的系統(tǒng),圖書(shū)和借閱用戶(hù)的關(guān)系就是多對(duì)多的,但是,不想把問(wèn)題搞復(fù)雜,在設(shè)計(jì)上,圖書(shū)模型只記錄圖書(shū)信息及冊(cè)數(shù),根據(jù)冊(cè)數(shù)判斷是否可借;用戶(hù)模型用于記錄圖書(shū)借閱信息,數(shù)據(jù)包括借閱人、所借圖書(shū)、借還時(shí)間等信息,另外,也為了能夠追蹤圖書(shū)去向,避免不必要的多表聯(lián)查。
三 模型實(shí)現(xiàn)
根據(jù)以上分析,模型大致如下(模型在Django其實(shí)就是定義類(lèi)):
class Book(models.Model): #定義圖書(shū)模型 book_name = models.CharField(max_length=100,verbose_name='書(shū)名') author_name = models.CharField(max_length=100,verbose_name='作者') total_num = models.IntegerField(default=0,verbose_name='總冊(cè)數(shù)') available_num = models.PositiveIntegerField(default=0,verbose_name='可借冊(cè)數(shù)') book_img = models.ImageField(upload_to='static/bookms/img/',verbose_name='封面圖') def __str__(self): return self.book_name class Meta: verbose_name = '圖書(shū)' verbose_name_plural = '圖書(shū)' #聯(lián)合約束 unique_together = ('book_name','author_name') ordering = ['id']
在圖書(shū)模型Book類(lèi)里又定義了員數(shù)據(jù)Meta,其實(shí)它對(duì)模型定義是非必須的,但在實(shí)際應(yīng)用中,定義一些元數(shù)據(jù)還是很有用的,如,ordering可以指定數(shù)據(jù)按哪個(gè)字段排序,unique_together聯(lián)合約束,verbose_name用于設(shè)置模型直觀(guān)、可讀的名字。所以,推薦定義一下。
四 其他資源
關(guān)于python學(xué)習(xí)、分享、交流,筆者開(kāi)通了微信公眾號(hào)【小蟒社區(qū)】,感興趣的朋友可以關(guān)注下,歡迎加入,建立屬于我們自己的小圈子,一起學(xué)python。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:Djangoweb開(kāi)發(fā)系列(二)圖書(shū)借閱管理系統(tǒng)之模型設(shè)計(jì)-創(chuàng)新互聯(lián)
本文URL:http://muchs.cn/article6/cdedig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、服務(wù)器托管、網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、用戶(hù)體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容