基于django的圖書分享系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
基于django的圖書分享系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
基于django的圖書分享系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
基于django的圖書分享系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
基于django的圖書分享系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、目錄一、引言3二、Django技術(shù)基礎(chǔ)3(一)Python語言4(二)Python的Web開發(fā)框架4(三)Django框架技術(shù)51.MVT架構(gòu)52.Form表單類63.基于類的通用視圖64.自動管理接口7三、系統(tǒng)的設(shè)計與實現(xiàn)7(一)系統(tǒng)總體設(shè)計71.內(nèi)容管理相關(guān)數(shù)據(jù)模型設(shè)計72.數(shù)據(jù)庫實現(xiàn)93.Web設(shè)計9結(jié)論13參考文獻(xiàn):14致 謝14基于Django的圖書內(nèi)容分享管理系統(tǒng)的設(shè)計與實現(xiàn)談鑫數(shù)學(xué)與信息學(xué)院 信息管理與信息系統(tǒng)專業(yè)2010級 指導(dǎo)老師:楊艷梅摘要:在互聯(lián)網(wǎng)日益發(fā)達(dá)的今天,無論是企業(yè)、事業(yè)單位、政府機(jī)構(gòu),還是學(xué)校、個人都將網(wǎng)絡(luò)作為傳播、管理信息的重要手段。面對圖書館數(shù)以百萬的圖書,

2、本文認(rèn)為,建立一個圖書分享網(wǎng)站有利于同學(xué)更快、更輕松的找到想要的書籍。近年來,基于開源的內(nèi)容管理系統(tǒng)迅速興起1,它不僅幫助人們快速建立發(fā)布信息的網(wǎng)絡(luò)平臺,而且對網(wǎng)站的內(nèi)容和資源進(jìn)行有效的整合和管理。在這種背景下,本文提出了運(yùn)用Django框架,以Python為主要開發(fā)語言開發(fā)快速發(fā)布圖書內(nèi)容分享的信息管理系統(tǒng)的方案。從技術(shù)、經(jīng)濟(jì)、社會三方面分析了可行性,技術(shù)方面,采用Django框架、MVC模式、Python語言、MySQL數(shù)據(jù)庫;經(jīng)濟(jì)方面,采用開源的“LAMP”軟件;社會方面,研發(fā)一套圖書內(nèi)容分享系統(tǒng),可以使同學(xué)快速找到需要的書籍。然后創(chuàng)建了應(yīng)用項目,進(jìn)行數(shù)據(jù)庫的配置,用models.py具

3、體實現(xiàn)系統(tǒng)的物理數(shù)據(jù)模型,同時生成了相應(yīng)的數(shù)據(jù)表。在Web設(shè)計時,先簡述了Django請求響應(yīng)流程,將HTTP請求通過與預(yù)定義的URLconf匹配,轉(zhuǎn)向相應(yīng)的控制層,調(diào)用特定 View函數(shù)處理。以基本模板為基礎(chǔ),利用Django特定的模板標(biāo)記嵌入網(wǎng)頁頁面中,并添加頁面邏輯完成頁面設(shè)計。同時利用Django內(nèi)置的管理界面進(jìn)行數(shù)據(jù)編輯和數(shù)據(jù)管理。整個系統(tǒng)最終完成了:基于模板的網(wǎng)站頁面和管理頁面,及時快速發(fā)布圖書信息,對圖書信息的評級、評論等功能。關(guān)鍵字:Django;內(nèi)容管理;Books share content management system based on DjangoTanxinIn

4、formation management and information system of Mathematics and information Department Grade 2010 Instructor: Yang YanmeiAbstract: Today, Internet technology is used widely by enterprises, institutions, school, government or individuals as tool to release and manage information. Face to millions of l

5、ibrary books, the paper considers that the establishment of a book sharing sites in favor of students faster and easier to find the desired book.In past several years, the open content management system is booming. Not only it helps to rapidly build the platform of releasing the information, but als

6、o it manage and integrate the contents and resource of the website. On this background, we propose to use Django framework to Python as the primary development language developed quickly publish book content sharing solutions for information management system. There are three feasibility analysis. T

7、echnically, using Django, MVC, Python, MySQL. Economically, using free, open source LAMP software. Society, Developed a books content sharing management system that allows students to quickly find the required books. Then create the application project, configure the database, with models.py concret

8、e realization of the physical data model of the system, while generating the corresponding data sheet. In Web design, first outlined Django request response process, the HTTP requests through predefined URLconf match, turn the corresponding control layer, call a specific function to deal View. Basic

9、 templates as the basis, Specific use Django template tags embedded in Web pages, and add the page to complete the page design logic. At the same time, we take advantage of the built-in Django admin interface for data editing and data management.The final completion of the entire system: the web-bas

10、ed administration pages and page templates, quick and timely release of information, information on books ratings, reviews and other features.Key words: Django; content management一、引言隨著計算機(jī)技術(shù)的發(fā)展,尤其是互聯(lián)網(wǎng)技術(shù)和相關(guān)企業(yè)的興起,開源軟件在操作系統(tǒng)、編譯工具鏈、數(shù)據(jù)庫、WEB服務(wù)器、移動操作系統(tǒng)等各個方面已經(jīng)成 為主流。而且許多企業(yè)利用開源軟件形成了獨特的商業(yè)模式。比如谷歌的 Android 操作系統(tǒng),從

11、 2007 年開源發(fā)布第一個版本起,到今天已經(jīng)發(fā)展到 4.4版本,占據(jù)了智能手機(jī)操作系統(tǒng)一半以上的市場份額,谷歌也通過 Android 操作系統(tǒng)在移動互聯(lián)網(wǎng)這一新興行業(yè)中占據(jù)了領(lǐng)先和主導(dǎo)地位。再比如在服務(wù)器端廣泛使用的關(guān)系型數(shù)據(jù)庫 MySQL,在以開源軟件和商業(yè)許可并行的模式下,得到了快速發(fā)展,并在 2008 年作價 10 億美金由 Sun 收購(后者又在 2009 年被 Oracle 公司以 74 億美金的高價收購)。相反,以前一直和開源軟件做斗爭的微軟公司,卻因為無法快速推出適應(yīng)市場的 Windows Phone 操作系統(tǒng),在移動互聯(lián)網(wǎng)競爭中處于下風(fēng)。為順應(yīng)潮流,微軟也開始擁抱開源,比如向

12、Samba項目貢獻(xiàn)代碼,放棄自己研發(fā)多年的大數(shù)據(jù)項目而選擇 Hadoop為其大數(shù)據(jù)的核心等。顯然,縱觀 IT 行業(yè)這二十多年的發(fā)展,開源軟件從黑客的理想之國,已經(jīng)形成了一股推進(jìn)計算機(jī)及相關(guān)行業(yè)不停進(jìn)步的巨大力量。很多人可能尚未意識到,我們使用的電腦中運(yùn)行 有開源軟件,手機(jī)中運(yùn)行有開源軟件,家里的電視也運(yùn)行有開源軟件,甚至小小的數(shù)碼產(chǎn)品(如電子相框)中也運(yùn)行有開源軟件,尤其是互聯(lián)網(wǎng)服務(wù)器端軟件,幾乎全部是開源軟件。毫不夸張地說,開源軟件已經(jīng)滲透到了我們?nèi)粘I畹姆椒矫婷妗U窃谶@樣的背景下,本文選擇了使用開源的Python語言作為主要開發(fā)語言,使用Django框架來完成系統(tǒng)的設(shè)計。從技術(shù)可行性來

13、說,本系統(tǒng)對于用戶僅需要一臺裝有瀏覽器的計算機(jī),即可完成大多數(shù)操作,對用戶個人電腦本身沒有特殊要求,一般個人電腦幾個滿足要求。開發(fā)軟件主要采用目前計算機(jī)網(wǎng)頁設(shè)計流行的“LAMP”,即為Linux、Apache、MySQL、Python,這些用來搭建動態(tài)網(wǎng)站的開源軟件,擁有強(qiáng)大的網(wǎng)站解決方案。采用Django框架對于圖書信息的發(fā)布是非常快捷便利的。用戶利用這些開源軟件豐富的解決方案可以快速開發(fā)系統(tǒng)。從經(jīng)濟(jì)可行性來說,本系統(tǒng)使用開源免費(fèi)的“LAMP”軟件,這些軟件與開源軟件許可證結(jié)合在一起,軟件費(fèi)用的開支幾乎為零費(fèi)用,費(fèi)用開支主要用于解決Web服務(wù)器、數(shù)據(jù)庫服務(wù)器和人工研發(fā)費(fèi)用,這些費(fèi)用是網(wǎng)站開發(fā)

14、維護(hù)中不可避免的費(fèi)用。從需求可行性來說,由于同類書籍的種類越來越多,如何選擇一本好書顯得至關(guān)重要,本文的研究便是希望設(shè)計出一套可以讓專家學(xué)者分享出相關(guān)專業(yè)的好書籍的內(nèi)容管理系統(tǒng)。二、Django技術(shù)基礎(chǔ)圖書內(nèi)容分享管理系統(tǒng)屬于輕量級的管理信息系統(tǒng),為了減少花費(fèi),所以采用快速而免費(fèi)的Web開發(fā)技術(shù)。傳統(tǒng)的重量級開發(fā)技術(shù)ASP.NET和J2EE顯然不適合輕量級的快速開發(fā)。故采用基于Python開源的Django框架2。使用Django框架可以使開發(fā)者將精力集中在主要的業(yè)務(wù)流程或核心子系統(tǒng)的實現(xiàn)上,一些基本輔助功能完全可以由Django自動實現(xiàn),開發(fā)者不必浪費(fèi)過多的精力在輔助功能的實現(xiàn)上,極大程度提

15、高了開發(fā)者的效率,減少項目的開發(fā)周期。同時由于Django是免費(fèi)開源框架,部署時使用的Apache和MySQL也都是免費(fèi)產(chǎn)品,可以使項目以較低的投資獲得較高的回報。通過使用Django將大量需要管理人員手工做的工作轉(zhuǎn)變?yōu)橄到y(tǒng)自動執(zhí)行,提高了管理效率,同時通過使用Django的多種有針對的技術(shù)手段,可以對工作人員的工作進(jìn)行有效的約束,使工作人員可以無安全遵守工作流程。在本文展開討論具體的應(yīng)用之前,首先對后文將要用到的Python語言和Django框架技術(shù)做簡要的介紹,并以此作為后面章節(jié)的理論基礎(chǔ)。(一)Python語言Python是一種解釋型的,面向?qū)ο蟮模瑤в袆討B(tài)語義的高級程序設(shè)計語言。自從G

16、uido van Rossum在20世紀(jì)90年代初創(chuàng)造這門語言以來,他的支持者就一直在穩(wěn)步增加,而且近些年來,社區(qū)對他的興趣也日益濃厚1.Python是一種通用編程語言,所以Python的特點是可以用于幾乎所有的軟件開發(fā)領(lǐng)域。在任何地方Python都能成為一個最佳解決方案的一部分2。在得過漢諾威舉辦的CeBIT2009大會上,Python獲得了Linux New Media頒發(fā)的最佳開源編程語言獎,以肯定Python一直以來在提升語言功能性和易用性方面做出的貢獻(xiàn)3。Python的語法非常簡潔,它不使用C/C+/Java等語言慣用的大括號作為劃分程序塊的標(biāo)記,也不使用分號作為一個語句的結(jié)尾,而是

17、使用空白縮進(jìn)作為程序段的劃分標(biāo)準(zhǔn),相同級別的代碼段必須擁有相同的空白縮進(jìn)。如此一來,就強(qiáng)制程序員編寫代碼時保持良好的代碼縮進(jìn)。所以用Python編寫的程序都具有良好的格式,非常易讀,同時幫助程序員節(jié)省了敲擊無用的大括號和分號所浪費(fèi)的時間。Python同時擁有強(qiáng)大的字符串處理能力,支持通用的正則表達(dá)式。由于Web程序會有大量的用戶輸入,需要經(jīng)常用到字符串操作,所以優(yōu)秀的字符串處理能力對于Web程序后端處理是不可或缺的。Python在這個方面非常適合Web開發(fā),相比傳統(tǒng)的PHP,Java以及ASP.NET而言,Python完成同樣的字符串處理要求所要編寫的代碼僅僅是傳統(tǒng)技術(shù)的1/3甚至更少。Pyt

18、hon還擁有多種實現(xiàn)版本,通常被提及Python實際上是CPython,也就是用C語言實現(xiàn)的Python。而隨著Python越來越受到開發(fā)者的歡迎,現(xiàn)在Python已經(jīng)擁有了Jython,IronPython等其他實現(xiàn)4。其中Jython是Python的Java實現(xiàn),而IronPython是Python的.NET實現(xiàn),未來也許會有更多的實現(xiàn)版本,但是僅僅從當(dāng)前看,Python已經(jīng)深入到了傳統(tǒng)的企業(yè)級應(yīng)用開發(fā)領(lǐng)域,這些實現(xiàn)已經(jīng)為傳統(tǒng)應(yīng)用使用Python進(jìn)行改進(jìn)鋪平了道路。當(dāng)前,Python擁有兩個版本分支,分別是2.x版和3.x版。2.x版的最新版本號是2.7.1,而3.x版的最新版本號是3.3

19、。3.x版與2.x版是并行更新的,只不過3.x版對2.x版進(jìn)行了改進(jìn),不在兼容2.x版的程序。2.x版的代碼如果想運(yùn)行在3.x版下,需要使用轉(zhuǎn)換程序進(jìn)行轉(zhuǎn)換。由于Python擁有超過20年的歷史積累,當(dāng)前絕大部分Python代碼都是基于2.x版 ,所以下面即將介紹的Django也是基于2.x版Python之上構(gòu)建的。(二)Python的Web開發(fā)框架隨著互聯(lián)網(wǎng)的發(fā)展,對于Web程序的開發(fā)已不僅僅局限于使用ASP.NET、JSP或者PHP等傳統(tǒng)開發(fā)技術(shù),這類開發(fā)技術(shù)由于開發(fā)周期長,經(jīng)常需要做重復(fù)性的工作,已經(jīng)不適合快速的Web系統(tǒng)開發(fā)。而以Ruby語言構(gòu)建的全新的Web開發(fā)框架Ruby On R

20、ails,為Web應(yīng)用程序開發(fā)提供了極其便捷的途徑,近年來的迅速興起成為了Web開發(fā)社區(qū)的焦點5。這個框架的最大優(yōu)點之一就是可以對Web系統(tǒng)進(jìn)行快速的開發(fā),避免了應(yīng)用傳統(tǒng)技術(shù)時需要反復(fù)編寫重復(fù)代碼的問題,從而極大程度上減少了Web系統(tǒng)項目的代碼量,提高了開發(fā)效率。由于Ruby On Rails是構(gòu)建在Ruby之上的,自然也就使Python社區(qū)的開發(fā)者有些沮喪。但Python語言比Ruby語言有著更為悠久的歷史,用戶遍布全世界的各行各業(yè)。當(dāng)然Web框架也是多如牛毛,比較知名的有Zope、Plone、Web.py、web2py等。Django是最近幾年才開發(fā)出來的基于Python的Web框架,目前

21、版本為1.6。Django框架作為Python的Web框架長的新生力量,其很多方面借鑒了Ruby On Rails的優(yōu)點,雖然發(fā)展歷史并不是很長,但是知名度非常高,是當(dāng)前Python社區(qū)中最著名的Web開發(fā)框架。(三)Django框架技術(shù)Django是構(gòu)建在純Python語言之的Web開發(fā)框架,在國內(nèi)剛開始掀起一股研究熱潮。Python創(chuàng)始人Guido van Rossum曾經(jīng)在接受采訪時說:“Django是我個人最喜歡的一個,也是我長期選擇的框架”6。從中不難看出Django框架在所有基于Python的Web框架中的地位。從2005年起至今,經(jīng)過不斷的發(fā)展,Django框架不僅吸收了Ruby

22、 On Rails框架的有點,也彌補(bǔ)了一些Ruby On Rails框架的不足,從而擁有了自己的特色。Django以其簡潔、快速的特性,吸引著越來越多國內(nèi)開發(fā)者的關(guān)注和使用,已有不少開發(fā)者在CPyUG討論組上公開了自己使用Django開發(fā)的Web應(yīng)用及源代碼7。當(dāng)前應(yīng)用Django進(jìn)行企業(yè)級系統(tǒng)開發(fā)的還比較少,但并不代表Django不適用于企業(yè)級開發(fā)。其同類技術(shù)Ruby On Rails已經(jīng)被企業(yè)所接受,所以應(yīng)用Django框架構(gòu)建企業(yè)級系統(tǒng)將有更為廣闊的發(fā)展空間。1.MVT架構(gòu)Django應(yīng)用開發(fā)遵循MVC模式8,但是在Django中,大多數(shù)人更喜歡稱之為MVT架構(gòu)。M即Model模型,V即

23、View視圖,T即Template模板。圖2-1顯示了Django的架構(gòu)總覽。在傳統(tǒng)的MVC模式下,控制器C代表邏輯層,用于實現(xiàn)業(yè)務(wù)邏輯。而在Django中,views.py既負(fù)責(zé)實現(xiàn)業(yè)務(wù)邏輯,又負(fù)責(zé)用數(shù)據(jù)渲染模板文件,下面對模型,視圖和模板做簡單的介紹。HTTP請求處理響應(yīng)(HTTP Handling)URL 映射(URL Mapping)應(yīng)用(Application)模型(Model)視圖(View)模板(Template)對象關(guān)系映射(ORM)模板引擎(Template Engine)數(shù)據(jù)庫(Database)文件系統(tǒng)(File System)圖2-1 Django架構(gòu)總覽圖模型即數(shù)據(jù)模

24、型,是Django開發(fā)中最先需要建立的。每當(dāng)使用Django的“manage.py startapp 應(yīng)用名稱”命令新建一個應(yīng)用時,Django都會自動生成用于存放數(shù)據(jù)模型定義的文件models.py。開發(fā)者可以在這個文件中利用Python的語法對數(shù)據(jù)表結(jié)構(gòu)進(jìn)行定義。定義完成后,Django可以通過syncdb命令將這些數(shù)據(jù)模型的定義映射到數(shù)據(jù)庫中,不需要人工編寫任何SQL語句去建立數(shù)據(jù)庫和數(shù)據(jù)表。使用高度抽象的數(shù)據(jù)模型還有一個好處就是開發(fā)者可以不關(guān)心最終部署時使用何種數(shù)據(jù)庫,開發(fā)時都可以使用基于文件的Sqlite3數(shù)據(jù)庫。在部署時開發(fā)者只需要應(yīng)用syncdb命令,將數(shù)據(jù)模型映射到最終部署的數(shù)

25、據(jù)庫即可。通過這種方式,可以節(jié)省開發(fā)者在搭建開發(fā)系統(tǒng)時的時間,加快開發(fā)效率。Django的數(shù)據(jù)模型類封裝了很多常用數(shù)據(jù)庫的操作,如查找,創(chuàng)建,更新,刪除等。開發(fā)者不需要使用任何SQL代碼去操作數(shù)據(jù)庫,只需要調(diào)用已經(jīng)封裝好的模型類API即可。當(dāng)然,Django也具有讓開發(fā)者直接運(yùn)行SQL代碼的能力,以便處理一些特殊的需求。視圖在Django中充當(dāng)控制器的角色,包含有實現(xiàn)業(yè)務(wù)邏輯的代碼。每當(dāng)一個新的應(yīng)用被Django創(chuàng)建時,Django會自動建立用于存放業(yè)務(wù)邏輯代碼的文件,即views.py。開發(fā)者可以通過在url.py文件中關(guān)聯(lián)用戶請求與邏輯處理代碼實現(xiàn)對特定用戶請求的處理。視圖代碼可以進(jìn)行任何

26、Python語言可做的操作,并且可以通過訪問數(shù)據(jù)模型類來獲取操作數(shù)據(jù)庫中的數(shù)據(jù)的能力。依賴于Python豐富的類庫,在邏輯代碼中幾乎可以做任何事情。模板用于實現(xiàn)用戶界面。Django的模板實際上是HTML文件內(nèi)嵌了預(yù)定義的標(biāo)記,用于實現(xiàn)一些復(fù)雜的邏輯操作,比如循環(huán),比較等。這些標(biāo)記基本上包括了所有常用的操作。Django還為開發(fā)者提供了自己定義模板標(biāo)記的方法,用于更高級的模板開發(fā)工作。相對于模型與視圖,模板的實現(xiàn)就比較自由,開發(fā)者可以自行在settings.py中指定模板文件的位置。業(yè)務(wù)邏輯代碼就會自動根據(jù)設(shè)置去搜索指定路徑中的模板文件,并對其渲染輸出。2.Form表單類表單的開發(fā)是Web開發(fā)

27、中最基本也是最重要的一部分,Django是實現(xiàn)了一套完整的Form表單類,高度抽象了幾乎所有常用的表單域。開發(fā)者可以根據(jù)實際需求,派生屬于自己的表單類并定義表單域。通過表單類可以完成HTML表單生成,服務(wù)器端用戶輸入驗證以及發(fā)生輸入錯誤時的表單重新顯示等通用表單任務(wù)9.對于HTML表單生成,Django的表單類提供了多種方法用于生成不同需求的HTML代碼,Django對不同的表單域類提供了不同的窗口部件,并且開發(fā)者還可以根據(jù)實際需要更改默認(rèn)提供給表單域類的窗口部件,從而生成滿足需求的HTML代碼。對于用戶輸入驗證,Django首先會根據(jù)不同的表單域類自動生成用于驗證數(shù)據(jù)有效性的代碼,同時Dja

28、ngo也為開發(fā)者提供了自定義驗證數(shù)據(jù)有效性的方法,開發(fā)者可以根據(jù)實際需求,自定義函數(shù)對特定的表單數(shù)據(jù)進(jìn)行驗證。3.基于類的通用視圖Web開發(fā)中常見的數(shù)據(jù)操作模式有新建,修改,刪除等。通常傳統(tǒng)的Web開發(fā)技術(shù)都要反復(fù)編寫代碼去實現(xiàn)對不同數(shù)據(jù)表的增刪改操作,一遍又一遍的重復(fù)已確定的模式10。Django為了提高開發(fā)效率,避免開發(fā)時間浪費(fèi)在重復(fù)的模式上,提出了通用視圖的概念。在Django1.3版本之前,Django一直是使用基于函數(shù)的通用視圖,由于函數(shù)不具有繼承的特性,所以有時候在應(yīng)付一些特殊需求時,就沒有合適的辦法可提供使用,一定程度上限制了通用視圖的使用。Django從1.3版本開始,是實現(xiàn)了

29、基于類的通用視圖,如ListView用于顯示數(shù)據(jù)對象列表,DetailView用于顯示一個數(shù)據(jù)對象的細(xì)節(jié),也就是一個數(shù)據(jù)表中一行的所有字段內(nèi)容,CreateView用于生成一個創(chuàng)建數(shù)據(jù)對象,UpdateView用于更新一個數(shù)據(jù)對象,DeleteView用于刪除一個對象。通過通用視圖,開發(fā)者可以直接生成操作指定數(shù)據(jù)模型的視圖類。這樣開發(fā)中進(jìn)行數(shù)據(jù)的增刪改操作時,開發(fā)者就可以避免編寫大量的重復(fù)代碼。而且使用基于類的通用視圖還有一個好處就是很多方法都允許被重載,這樣開發(fā)者就可以在遇到特殊需求時,通過對不同方法的重載來滿足需求。4.自動管理接口自動管理接口是Django框架的一個主要的特點11。一個后

30、臺管理系統(tǒng)通常是一個用于對數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行管理的界面。但是,相對于通用的數(shù)據(jù)庫管理系統(tǒng)卻有著很大的區(qū)別。數(shù)據(jù)庫管理軟件由于是通用軟件,設(shè)計上完全是朝著通用的方式設(shè)計的,不可能對不同的數(shù)據(jù)字段提供有個性的操作界面,而且也不允許用戶對其進(jìn)行任何改變。系統(tǒng)管理員不可能使用數(shù)據(jù)庫管理軟件代替系統(tǒng)后臺。傳統(tǒng)的ASP.NET、J2EE以及當(dāng)前流行的Ruby On Rails都不具有自動生成系統(tǒng)后臺管理界面的功能。而Django卻打破常規(guī),根據(jù)用戶的數(shù)據(jù)模型定義,自動生成的管理接口。通過自動生成的管理系統(tǒng),可以實現(xiàn)用戶的登錄退出,權(quán)限驗證,數(shù)據(jù)瀏覽,查詢,添加,刪除,編輯等功能。基本上,日常管理中常見的管理

31、操作方法,都已經(jīng)被自動生成的管理系統(tǒng)實現(xiàn)了。同時自動生成的管理系統(tǒng)還支持自定義的擴(kuò)展。這個擴(kuò)展包括功能的擴(kuò)展和界面的擴(kuò)展。自動生成的管理接口支持用戶編寫action對管理的數(shù)據(jù)對象進(jìn)行特定的操作,研究人員可以借助管理接口已經(jīng)實現(xiàn)的數(shù)據(jù)對象選擇操作,對一個或者一組數(shù)據(jù)進(jìn)行自定義的操作。并且管理接口還支持研究人員用自己的模板重載管理接口默認(rèn)的模板,用以提供符合個性需求的管理界面。通過自動管理接口的應(yīng)用,很多系統(tǒng)功能在設(shè)計上可以獲得極大的簡化,研究人員只需要設(shè)計好自己的ModelAdmin類即可實現(xiàn)一個具有強(qiáng)大的增加,刪除,修改以及查詢功能的系統(tǒng)后臺。與同類技術(shù)產(chǎn)品相比,可以更為有效的提升開發(fā)效率,

32、并且由于自動生成的管理接口已經(jīng)達(dá)到了產(chǎn)品級的質(zhì)量標(biāo)準(zhǔn),應(yīng)用它可以比研究人員自己編寫復(fù)雜而重復(fù)的后臺代碼擁有更高的質(zhì)量。三、系統(tǒng)的設(shè)計與實現(xiàn)系統(tǒng)設(shè)計時系統(tǒng)開發(fā)過程中核心的一項工程活動,其主要任務(wù)是提供一張詳細(xì)的“設(shè)計圖紙”來指導(dǎo)開發(fā)者完成系統(tǒng)的開發(fā)過程。系統(tǒng)實現(xiàn)是軟件工程的一個階段,是系統(tǒng)設(shè)計的繼續(xù),其主要任務(wù)就是一條一條代碼地完成軟件的開發(fā)過程,是實現(xiàn)軟件從無到有的過程。本章論述的是本系統(tǒng)各個功能模塊的詳細(xì)設(shè)計。在設(shè)計的時候,將整個系統(tǒng)細(xì)分為多個功能模塊,從而來給系統(tǒng)的實現(xiàn)提供的設(shè)計方案。同時,本章還通過代碼片段來分析和論述了一部分重點功能的實現(xiàn)方法。(一)系統(tǒng)總體設(shè)計圖書內(nèi)容分享管理系統(tǒng)主要

33、承擔(dān)圖書信息的管理工作,其主要工作包括對圖書信息的發(fā)布、用戶驗證以及對書籍的評論管理。在系統(tǒng)設(shè)計時,首先討論了各個功能的數(shù)據(jù)模型,隨后在數(shù)據(jù)模型的基礎(chǔ)上對功能的實現(xiàn)進(jìn)行了詳細(xì)的設(shè)計,最后討論了數(shù)據(jù)庫實現(xiàn)及Web設(shè)計12。1.內(nèi)容管理相關(guān)數(shù)據(jù)模型設(shè)計根據(jù)最初對系統(tǒng)設(shè)計的需求,下面將討論圖書內(nèi)容管理以及評論管理數(shù)據(jù)模型。圖書內(nèi)容主要包括以下內(nèi)容:標(biāo)題、作者、發(fā)布時間、圖書內(nèi)容、分類、評論??紤]到實際使用中,管理員可能會對某些評論進(jìn)行限制,所以每條圖書信息還應(yīng)包括評論允許。同時,用戶可能希望為圖書評級,所以每一條圖書信息還應(yīng)允許用戶進(jìn)行評級。根據(jù)以上分析,定義圖書內(nèi)容的數(shù)據(jù)模型部分代碼如下13:cl

34、ass BookPost(Displayable, Ownable, RichText, AdminThumbMixin):title = models.CharField(_(標(biāo)題), max_length=500)categories = models.ManyToManyField(BookCategory,verbose_name=_(分類),blank=True, related_name=bookposts)allow_comments = models.BooleanField(verbose_name=_(允許評論),default=True)comments = Commen

35、tsField(verbose_name=_(評論)rating = RatingField(verbose_name=_(評級)class TimeStamped(models.Model):class Meta:abstract = Truecreated = models.DateTimeField(null=True, editable=False)class ThreadedComment(Comment):by_author = models.BooleanField(_(By the book author), default=False)replied_to = models.

36、ForeignKey(self, null=True, editable=False,related_name=comments)rating = RatingField(verbose_name=_( 評級)objects = CommentManager()class Meta: verbose_name = _(評論) verbose_name_plural = _(評論)class Rating(models.Model): value = models.IntegerField(_(Value)借助于Django優(yōu)雅的設(shè)計模式以及Python語言優(yōu)秀的語法設(shè)計,圖書內(nèi)容管理的數(shù)據(jù)模型

37、的定義非常簡潔明了,即使沒有任何編程基礎(chǔ)的人也可以從其定義中大概讀懂每一行的意思。上面的數(shù)據(jù)模型首先定義了圖書內(nèi)容的標(biāo)題,長度最大為500個字節(jié),類型使用的是CharField類型。這個類型最后會被Django映射到目標(biāo)的數(shù)據(jù)庫系統(tǒng)中,根據(jù)數(shù)據(jù)庫系統(tǒng)的不同,目標(biāo)字段的類型可能會有少許差別,對于本系統(tǒng)使用的MySQL服務(wù)器,該字段最終會被映射成VARCHAR數(shù)據(jù)表字段。Comments用于存放評論,使用的是CommentField字段。這個字段最終會被映射成為數(shù)據(jù)表中的longtext字段。之所以使用longtext字段,是因為評論的形式多樣,如果單純的使用可變長字符串定義,則很可能會在實際使用

38、中發(fā)生字段長度不夠的問題。Crated是日期型字段,這里使用DateTime字段。可以看出,Django的數(shù)據(jù)模型定義語法完全遵循Python的語法,所以可以允許調(diào)用Python的代碼。replied_to字段用于保存用戶對圖書的評論,這里使用了 null = True, blank = True,將該字段設(shè)置為可以為空,允許用戶在不需要的時候可以不輸入任何信息。與同類產(chǎn)品所用技術(shù)相比,Django在數(shù)據(jù)模型定義方面具有極高的優(yōu)越性,主要體現(xiàn)簡潔性、靈活性與擴(kuò)展性等方面。企業(yè)級B/S應(yīng)用系統(tǒng)多采用ASP.NET或者Java開發(fā)。ASP.NET沒有提供定義數(shù)據(jù)模型的功能,雖然借助強(qiáng)大的Visua

39、lStudio可以直接操作數(shù)據(jù)庫,定義數(shù)據(jù)庫表格。但是一旦想要使用其他的開源數(shù)據(jù)庫,如MySQL等,就必須重新編寫數(shù)據(jù)訪問層代碼以適應(yīng)新的目標(biāo)數(shù)據(jù)庫,而且研究人員還必須要編寫大量SQL代碼去手工創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表,非常的費(fèi)時費(fèi)力。由于沒有數(shù)據(jù)模型的機(jī)制,系統(tǒng)的數(shù)據(jù)訪問層就會被固定在單一數(shù)據(jù)庫上,所以開發(fā)時研究人員必須要將開發(fā)環(huán)境的數(shù)據(jù)庫配置成和部署環(huán)境一樣的數(shù)據(jù)庫,以便測試各種功能,一旦數(shù)據(jù)庫改變,就必須重新針對新的目標(biāo)數(shù)據(jù)庫重新編寫合適的SQL代碼,非常不靈活。而Django不存在這種問題。使用Django只需要在setting.py文件中設(shè)置好目標(biāo)數(shù)據(jù)庫的類型,如SQLite、MySQL、

40、PostgreSQL等,以后只需要更改一行代碼,就可以實現(xiàn)目標(biāo)數(shù)據(jù)庫的改變。在本系統(tǒng)的實際開發(fā)中,就利用了這個特性,開發(fā)環(huán)境被配置成為使用SQLite數(shù)據(jù)庫,由于SQLite是文件型數(shù)據(jù)庫且Python中自帶了SQLite數(shù)據(jù)庫,這樣就減輕了配置開發(fā)環(huán)境的負(fù)擔(dān),換句話說如果沒有特殊的需求,開發(fā)環(huán)境中可以不安裝熱河數(shù)據(jù)庫軟件。本系統(tǒng)實際部署時使用的是MySQL數(shù)據(jù)庫,在部署時只需要利用Django的一個管理命令syncdb,就可以將所有數(shù)據(jù)模型的定義轉(zhuǎn)化為合適于目標(biāo)數(shù)據(jù)庫的SQL代碼,并應(yīng)用與目標(biāo)數(shù)據(jù)庫。整個過程無需研究人員人為干預(yù),充分體現(xiàn)了Django數(shù)據(jù)模型的簡潔與靈活。由于Django的

41、數(shù)據(jù)模型定義是完全基于Python代碼的,一個數(shù)據(jù)模型定義就是一段Python代碼,如果想要對數(shù)據(jù)模型進(jìn)行擴(kuò)展,或者對數(shù)據(jù)進(jìn)行其他的邏輯操作,完全可以在Django的數(shù)據(jù)模型類中調(diào)用已編寫好的Python代碼。這樣在進(jìn)行系統(tǒng)開發(fā)時,研究人員可以隨意對數(shù)據(jù)模型的功能進(jìn)行需要的擴(kuò)展,為數(shù)據(jù)模型增加新的邏輯操作。2.數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)庫實現(xiàn)首先要根據(jù)上一節(jié)介紹的數(shù)據(jù)模型,通過在Django框架下Python語言建立Model,與此同時,MySQLdb是一個PythonDB API2.0接口,提供了一個python連接MySQL數(shù)據(jù)庫的模塊。Django有著一個設(shè)計良好的ORM,這種方式使得其可以有效的屏

42、蔽底層數(shù)據(jù)庫的不同。利用Django的應(yīng)用目錄中的setting.py文件實現(xiàn)配置數(shù)據(jù)庫。如:DATABASES = default: ENGINE: django.db.backends.mysql, NAME: bookmis, USER: root, PASSWORD: python, HOST: localhost, PORT: 3306, 3.Web設(shè)計Web設(shè)計主要針對訪問頁面和管理界面,其中訪問頁面是以基本模板為基礎(chǔ),用HTML語言編輯出一個顯示圖書信息的頁面,管理界面則借助Django管理模板進(jìn)行設(shè)計。3.1 Django請求響應(yīng)流程圖3-1 Django請求響應(yīng)流程圖如圖3-

43、1所示,當(dāng)服務(wù)器收到瀏覽器發(fā)出的一個HTTP請求以后,服務(wù)器特定的ModPythonHandler產(chǎn)生HttpRequset響應(yīng)并傳遞給下一個Resquest Middleware組件并處理。然后調(diào)用可以調(diào)用的Request或者View Middleware。這些類型的中間件通常是用來增強(qiáng)HttpRequest對象,是用來對一些特別類型的Request做特別處理。只要其中任何一個返回HttpResponse,系統(tǒng)就跳過處理View。同時也要考慮到異常錯誤,異常處理中間件(Exception Middleware)便是解決異常錯誤的中間件。如果一個視圖函數(shù)拋出異常,控制器會傳遞異常信息給Exce

44、ption Middleware處理。只有這個中間件返回一個HttpResponse,才處理這個Exception,否則這個Exception將會再次拋出。Django框架仍然包含缺省的視圖來生成友好的404/500 Response。最后,Response Middleware 發(fā)送HttpResponse給瀏覽器之前的后處理或者清除請求用到的相關(guān)資源。3.2 URL設(shè)計在Django項目中,URL設(shè)計是不可回避的內(nèi)容,它定義在配置腳本文件中ROOT_URLCONF屬性值。在Django服務(wù)器啟動后,系統(tǒng)將此URL結(jié)果與配置文件中URL設(shè)計進(jìn)行匹配,繼而調(diào)用相應(yīng)的方法。當(dāng)收到一個HttpRe

45、squest,Django首先試圖把URL當(dāng)普通的Python字符串和URL配置模式匹配,而不是Unicode字符串,且不包括“GET”方法參數(shù)或“POST”方法參數(shù)或者域名,它也不包括URL開頭的第一個斜線。同時,在解析URL配置是請求方法,如“POST”方法和“GET”方法不會予以考慮,也就是,對于同一個URL的所有請求方法將被引導(dǎo)到同一方法,根據(jù)請求方法處理分支是視圖View所要做的工作。3.3 基本模板Django框架提供了一種模板語言,該語言可以被快速呈現(xiàn)且易于使用,Django模板代碼和普通的HTML代碼有很大的相似點,Django模板代碼只是利用variables和tags特定的

46、模板標(biāo)記嵌入創(chuàng)建的模板頁面,繼而添加頁面邏輯處理。variables和tags這類變量會使用值替換進(jìn)行計算,以此實現(xiàn)基本的控制邏輯。模板可以使用HTML、XML、CSB和純文本來生成。Django框架使用模板繼承來實現(xiàn),為頁面創(chuàng)建一個統(tǒng)一的外表,而用標(biāo)記塊定義基礎(chǔ)文檔來實現(xiàn)繼承,不用替換每個模板的內(nèi)容。當(dāng)Django的View和Template準(zhǔn)備妥當(dāng),需要在setting.py中TEMPLATE_DIRS域設(shè)置模板絕對路徑。基礎(chǔ)模板base.html,定義站點的主要外觀,格式形如: %block title%endblock% %block header% %include header.h

47、tml% %endblock% %block middle% %endblock% %block myContent% %endblock% %block end% %include end.html% %endblock% %block test% %endblock% 子模板child.html的內(nèi)容,不需要定義base.html所有的代碼塊,只需對子模塊所需的代碼進(jìn)行定義。%extends base.html% %block title% block.super %endblock% %block middle% block.super 繼承模板的內(nèi)容 %endblock% %block

48、 myContent% block.super %endblock%通過以上基礎(chǔ)模板的設(shè)置,填入適當(dāng)?shù)哪0宕a,與數(shù)據(jù)庫中相應(yīng)的數(shù)據(jù)交互,便可建立一個簡單的網(wǎng)頁頁面。圖3-2便是以模板為基礎(chǔ)建立的圖書內(nèi)容管理網(wǎng)頁。圖3-2 圖書內(nèi)容管理網(wǎng)站頁面3.4 Django管理Django的管理界面對于編輯管理頁面既省時又好用。其中對于數(shù)據(jù)編輯工作來說,該管理界面發(fā)揮了事半功倍的功效,特別是那些沒有任何數(shù)據(jù)庫編程技術(shù)背景的用戶來錄入數(shù)據(jù)。這樣的管理界面可以查驗我們先前建立的部分模型的同時,也可以查驗管理者錄入的數(shù)據(jù)。圖3-3便是Django管理的登錄界面。圖3-3 Django管理的登錄界面首先在INS

49、TALLED_APPS設(shè)置中加入“django.contrib.admin”、“django.contrib.sessions”、“django.contrib.auth”、“django.contrib.contenttypes”。也需要在bookmis文件夾內(nèi)的urls.py中添加諸如一下語句:urlpatterns = patterns(book.views,(r$, method_splitter,GET: somepage_get, POST: somepage_post),)這樣的urls.py將View中“GET”和“POST”方法分離,“GET”和“POST”兩個方法都是瀏覽器發(fā)送數(shù)據(jù)到服務(wù)器端,兩者的區(qū)別主要在于“GET”方法更強(qiáng)調(diào)操作的安

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論