Djangoweb開發(fā)系列(二)圖書借閱管理系統(tǒng)之模型設(shè)計(jì)-創(chuàng)新互聯(lián)

一 前言

創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元平魯做網(wǎng)站,已為上家服務(wù),為平魯各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

在上一篇文章需求分析中,已經(jīng)大致說明了為什么要開發(fā)圖書借閱管理系統(tǒng)、系統(tǒng)應(yīng)該具備哪些角色或行為、系統(tǒng)如何工作等,對(duì)該系統(tǒng)應(yīng)該有了大致的印象,那接下來的文章就是介紹如何一步步實(shí)現(xiàn)。

本文將介紹開發(fā)圖書借閱管理系統(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名詞:視圖)。乍一看,好像是偏題了,明明說的是Django的模型(model),怎么又扯到視圖(view)了。其實(shí),這里是想把本就緊密的概念先引入進(jìn)來,混個(gè)眼熟,更重要的是,好的模型設(shè)計(jì)既能適應(yīng)未來的功能擴(kuò)展,又能提升性能,是系統(tǒng)開發(fā)的基礎(chǔ)。要知道,你設(shè)計(jì)了什么樣的模型,數(shù)據(jù)就按什么樣子去存、去取。

二 模型設(shè)計(jì)思路

根據(jù)上一篇文章的分析,系統(tǒng)需要維護(hù)兩類數(shù)據(jù),即圖書信息和用戶借閱信息,相應(yīng)的,我們?cè)O(shè)計(jì)兩個(gè)模型,圖書模型和用戶借閱模型。至于如何設(shè)計(jì)模型,需要根據(jù)業(yè)務(wù)需要進(jìn)行分析,就拿圖書模型而言,可以做如下分析:

1.模型需要有哪些字段?

首先要搞明白的是,在Django里,模型model相對(duì)于數(shù)據(jù)庫(kù)的一種表,模型中的每個(gè)變量,相當(dāng)于表中的列,因?yàn)镈jango內(nèi)置ORM,所以,可以不需要考慮如何建表,如何寫sql進(jìn)行數(shù)據(jù)操作,一切就奉行python的編寫習(xí)慣。

那么,圖書模型至少需要有以下字段吧:

1) 書名,用于標(biāo)識(shí)圖書;

2)作者名,用于標(biāo)識(shí)圖書,畢竟同名書籍還是很多的;

3)圖書總冊(cè)數(shù),作為管理系統(tǒng),需要知道該圖書總共有多少冊(cè)吧;

4)圖書可借冊(cè)數(shù),作為借閱系統(tǒng),需要知道該圖書是否可借,有多少本可借;

5)封面圖,來張圖書靚照,前端頁(yè)面不枯燥;

.... 大致,主要的就這么多了,當(dāng)然,可以根據(jù)業(yè)務(wù)需要繼續(xù)拓展,如圖書分類,圖書所屬等等,重在思路,就不在此一一展開了。

2.是否需要設(shè)計(jì)主鍵或索引?

如果模型未指定主鍵,Django會(huì)幫忙增加一個(gè)自增加的ID字段作為主鍵,主鍵是唯一索引的,在我們的場(chǎng)景里,任何一個(gè)字段值都有可能重復(fù)的,所以不設(shè)計(jì)自定義的主鍵了,就交給Django打理吧,需要索引查詢時(shí),就用ID。

3.是否需要設(shè)計(jì)外鍵?

Django有三種外鍵關(guān)系,即一對(duì)一、多對(duì)一、多對(duì)多,理解起來是這樣的,一對(duì)一就好比員工和員工號(hào)的關(guān)系,一個(gè)員工只有一個(gè)員工號(hào),一個(gè)員工號(hào)也只對(duì)應(yīng)一個(gè)員工;多對(duì)一,比如工廠和汽車的關(guān)系,一個(gè)工廠可以生產(chǎn)很多汽車,一臺(tái)汽車由一個(gè)工廠生產(chǎn);多對(duì)多呢,也很常見,比如,一本書可以有多個(gè)作者,一個(gè)作者也可以寫多本書;

把三種關(guān)系套在我們的系統(tǒng),圖書和借閱用戶的關(guān)系就是多對(duì)多的,但是,不想把問題搞復(fù)雜,在設(shè)計(jì)上,圖書模型只記錄圖書信息及冊(cè)數(shù),根據(jù)冊(cè)數(shù)判斷是否可借;用戶模型用于記錄圖書借閱信息,數(shù)據(jù)包括借閱人、所借圖書、借還時(shí)間等信息,另外,也為了能夠追蹤圖書去向,避免不必要的多表聯(lián)查。

三 模型實(shí)現(xiàn)

根據(jù)以上分析,模型大致如下(模型在Django其實(shí)就是定義類):


class Book(models.Model):
    #定義圖書模型
    book_name = models.CharField(max_length=100,verbose_name='書名')
    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 = '圖書'
        verbose_name_plural = '圖書'
        #聯(lián)合約束
        unique_together = ('book_name','author_name')
        ordering = ['id']

在圖書模型Book類里又定義了員數(shù)據(jù)Meta,其實(shí)它對(duì)模型定義是非必須的,但在實(shí)際應(yīng)用中,定義一些元數(shù)據(jù)還是很有用的,如,ordering可以指定數(shù)據(jù)按哪個(gè)字段排序,unique_together聯(lián)合約束,verbose_name用于設(shè)置模型直觀、可讀的名字。所以,推薦定義一下。

四 其他資源

關(guān)于python學(xué)習(xí)、分享、交流,筆者開通了微信公眾號(hào)【小蟒社區(qū)】,感興趣的朋友可以關(guān)注下,歡迎加入,建立屬于我們自己的小圈子,一起學(xué)python。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:Djangoweb開發(fā)系列(二)圖書借閱管理系統(tǒng)之模型設(shè)計(jì)-創(chuàng)新互聯(lián)
本文URL:http://bm7419.com/article6/cdedig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化服務(wù)器托管、網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司