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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、體實現系統(tǒng)的物理數據模型,同時生成了相應的數據表。在Web設計時,先簡述了Django請求響應流程,將HTTP請求通過與預定義的URLconf匹配,轉向相應的控制層,調用特定 View函數處理。以基本模板為基礎,利用Django特定的模板標記嵌入網頁頁面中,并添加頁面邏輯完成頁面設計。同時利用Django內置的管理界面進行數據編輯和數據管理。整個系統(tǒng)最終完成了:基于模板的網站頁面和管理頁面,及時快速發(fā)布圖書信息,對圖書信息的評級、評論等功能。關鍵字:Django;內容管理;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一、引言隨著計算機技術的發(fā)展,尤其是互聯網技術和相關企業(yè)的興起,開源軟件在操作系統(tǒng)、編譯工具鏈、數據庫、WEB服務器、移動操作系統(tǒng)等各個方面已經成 為主流。而且許多企業(yè)利用開源軟件形成了獨特的商業(yè)模式。比如谷歌的 Android 操作系統(tǒng),從

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

34、ass BookPost(Displayable, Ownable, RichText, AdminThumbMixin):title = models.CharField(_(標題), 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)雅的設計模式以及Python語言優(yōu)秀的語法設計,圖書內容管理的數據模型

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

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

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

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

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

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

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

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

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

46、模板標記嵌入創(chuàng)建的模板頁面,繼而添加頁面邏輯處理。variables和tags這類變量會使用值替換進行計算,以此實現基本的控制邏輯。模板可以使用HTML、XML、CSB和純文本來生成。Django框架使用模板繼承來實現,為頁面創(chuàng)建一個統(tǒng)一的外表,而用標記塊定義基礎文檔來實現繼承,不用替換每個模板的內容。當Django的View和Template準備妥當,需要在setting.py中TEMPLATE_DIRS域設置模板絕對路徑?;A模板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的內容,不需要定義base.html所有的代碼塊,只需對子模塊所需的代碼進行定義。%extends base.html% %block title% block.super %endblock% %block middle% block.super 繼承模板的內容 %endblock% %block

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

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

溫馨提示

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

評論

0/150

提交評論