物品租賃系統(tǒng)的設計與實現(xiàn)_第1頁
物品租賃系統(tǒng)的設計與實現(xiàn)_第2頁
物品租賃系統(tǒng)的設計與實現(xiàn)_第3頁
物品租賃系統(tǒng)的設計與實現(xiàn)_第4頁
物品租賃系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

畢業(yè)論文題目:物品租賃系統(tǒng)的設計與實現(xiàn))前言問題提出背景隨著國家經濟和互聯(lián)網飛速發(fā)展,國民生活水平還在不斷提高,人們的生活也更加多姿多彩了。大家已經習慣通過網絡來解決生活中的問題,網絡已經無時無刻存在在大家的日常生活中,隨著5G時代的到來,和5G基站的建設,未來會更加離不開網絡這個環(huán)境。這個時候,針對對于租賃行業(yè),運用計算機技術,開發(fā)一款用于物品租賃的系統(tǒng),是適應現(xiàn)代化網絡建設的必然要求,有助于提高出租方和承租方的效率,減少中間環(huán)境,降低費用,節(jié)省時間。因為現(xiàn)在租賃市場不統(tǒng)一、中介費用頗高、種類固定單一,這些問題一直困擾著廣大的出租方和承租方,解決這樣的問題刻不容緩。對于承租方來說,租東西是一個比較復雜的事情,比較耗費時間和精力,每次要租東西都要下很多APP,對比各個APP的價格,然后這些APP還需要收取高額的中間費用。因此,開發(fā)一款可用的物品租賃系統(tǒng),可用為出租方和承租方提供方便,降低他們的時間成本和金錢成本。系統(tǒng)開發(fā)意義本開發(fā)項目旨在為大家在進行租賃行為的時候提供方便,進行租賃信息資源整合,不同平臺有著不同的管理后臺,不同平臺之間信息不同步,不同的行業(yè)也存在因為租賃物品種類的不同,提供租賃的租賃平臺不一樣,就是相同行業(yè)中,也存在出租物品重點一樣的租賃平臺,這些平臺之間的數(shù)據(jù)也不同步。在這些出租方發(fā)布出租信息和承租方瀏覽物品出租信息時,進行租賃的行為時,為了總是需要下載或者登陸注冊多個平臺,成為多個平臺的用戶,才能進行搜索瀏覽這一步驟。大大降低出租和承租方兩方的效率,為了提高各方的工作效率,大部分的復雜的租賃信息,都是采用傳統(tǒng)的方法進行租賃信息管理;對于承租方,大量的出租信息也沒有一個比較好的、更有效的展現(xiàn)途徑和渠道。本項目對于上述的問題,對于目前的物品租賃管理web平臺系統(tǒng)的的研究,根據(jù)用戶的需求,基于python的一個最近流行的框架Django和開源的mysql數(shù)據(jù)庫,設計并實現(xiàn)一個相對來說比較完善的物品租賃管理web系統(tǒng),物品租賃信息管理web系統(tǒng)的工作室是非常細致、瑣碎的,物品租賃信息管理、用戶信息管理、物品基本信息都是不能出錯的,如果管理員手動管理,不可避免會導致出錯,并花費用戶的大量時間精力。本系統(tǒng)的開發(fā)就是為了解決各租賃信息平臺管理中的信息不統(tǒng)一的問題,令出租方和承租方的租賃成功率提高。項目研究現(xiàn)狀目前,中國租賃行業(yè)發(fā)展隨著社會經濟和互聯(lián)網的發(fā)對租賃行業(yè)的管理水平依舊是低下的,效率不高、限于傳統(tǒng)的方式,租賃信息彼此獨立,很難給大眾及時提供準確的信息,妨礙了市場有效的發(fā)展。隨著中國人民生活水平的快速發(fā)展,物品出租行業(yè)的發(fā)展和人們的租借需求推動物品出租行業(yè)信息管理的全面爆發(fā),雖然有許多大大小小的中介網站,但是在信息管理方面還是不夠成熟統(tǒng)一和完善,效率低下,中介費高,出租方和承租方還會花費很多人力成本和時間成本。但是出租方通過網絡的力量,在固定統(tǒng)一的租賃web平臺發(fā)布信息,而承租方同樣也通過上網,在固定統(tǒng)一的租賃web平臺瀏覽搜索分類想要的出租信息,然后通過物品基礎信息,得到出租房的聯(lián)系方式,雙方直接溝通對接,這樣既節(jié)省成本,雙方能及時溝通,減少廣告成本,減少中介賺差價,又能快速解決問題。項目可行性分析根據(jù)現(xiàn)有的技術條件,及技術水平和能力,該系統(tǒng)是基于B/S(瀏覽器/服務器)結構的統(tǒng)一租賃信息管理web平臺。采用面向對象編程語言python開發(fā),數(shù)據(jù)庫使用免費開源的mysql,web開發(fā)框架則使用python語言中最流行的框架Django。B/S架構通常需要在前端對用戶的輸入進行嚴格檢驗,同時在數(shù)據(jù)庫中進行交互的時候,也要嚴格防止因用戶輸入問題而引發(fā)的錯誤異常。開發(fā)技術與工具簡介PyCharm202forProfessional使用PyCharm2020.1專業(yè)版進行本系統(tǒng)的快速開發(fā),PyCharm還會提示開發(fā)人員要遵循代碼規(guī)范,如縮進、注釋。PyCharm是一種PythonIDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,比如調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供了一些高級功能,以用于支持Django框架下的專業(yè)Web開發(fā)。首先,PyCharm擁有一般IDE具備的功能,比如,調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。另外,PyCharm還提供了一些很好的功能用于Django開發(fā),同時支持GoogleAppEngine,更酷的是,PyCharm支持IronPython。Django3.0Django是一個高級PythonWeb框架,它由經驗豐富的開發(fā)人員構建,可以解決大部分Web開發(fā)的麻煩,三個特點:快速開發(fā),高安全性和極具可擴展性。快速開發(fā),Django目的是幫助開發(fā)人員在最快的時間內將程序功能實現(xiàn)。高安全性,Django強調安全性,并且它還讓開發(fā)避開許多常見的安全性錯誤,例如安全概覽,在Django中披露的安全問題,點擊劫持保護,跨站請求偽造CSRF保護,登錄加密,安全中間件。可擴展性,網上通常一些最繁忙的網站都利用Django的功能來快速靈活地進行擴展。Django提供了一個抽象的模型("models")層,為了構建和操縱你的Web應用的數(shù)據(jù)。Django具有“視圖(views.py)”的概念,視圖專門負責處理用戶的請求并返回響應。模板層提供了一個對設計者友好的語法用于渲染向用戶呈現(xiàn)的信息。Django提供了一個豐富的框架來幫助創(chuàng)建表單和處理表單數(shù)據(jù)。部署,Django可以運行在Apache,Nginx上,也可以運行在支持WSGI,F(xiàn)astCGI的服務器上??蛻舳税l(fā)出請求服務端響應,進行處理,返回給客戶端處理后的數(shù)據(jù),具體數(shù)據(jù)交互如圖2-1所示。圖2-1django客戶端服務器端數(shù)據(jù)交互圖Fig2-1Djangoclient-serverdatainteractiondiagram工作機制,django使用manage.py文件和runserver命令來啟動服務器,在一般情況下啟動時,服務器就會載入和manage.py文件同一目錄下的setting.py文件的各種配置,這個setting.py文件包括項目的全部配置信息,如UrlConf,mysqlconf等等,其中最重要的配置就是ROOT_URLCONF,這個配置會告訴大家django有哪些python模塊應該作為本站的urlconf,默認是urls.py文件中的urlconf。當用戶訪問地址欄的url地址時,Django服務器會根據(jù)urlconf中的ROOT_URLCONF的設置來載入url配置。然后服務器會自動按照順序匹配,按照URLConf里的提前配置好的配置項URLPatterns進行匹配。如果匹配成功就會調用相關的views函數(shù),跳轉到對應的template模板。最后這個被調用的views函數(shù)就會返回一個對象,比如HttpResponse對象。具體工作流程圖如圖2-2所示。圖2-2django架構流程圖Figure2-2.DiagramofthedjangoarchitecturePython3.8Python最大的優(yōu)點就是簡單清晰,python代表簡單主義,指導思路是,對于某個特定的問題,只要有一種最好的方法來解決就可以了,python和別的大部分編程語言的一個最大的區(qū)別就是完全由每一行的開頭的縮進來界定一個模塊的界限,通過縮進讓python代碼顯得更加的清晰和美觀。Python的面向對象,和傳統(tǒng)的面向對象語言(如C++和JAVA)不同。在python中,一切都是對象,模塊、類、函數(shù)、變量、類的實例都是python對象。雖然python支持面向對象和面向對象編程,但是python不強制使用類的概念,他允許使用面向對象的思想來開發(fā)python代碼。Python還擁有豐富的標準庫來提供支持,可以通過導入某個模塊包,來使用這個模塊包的函數(shù)。除了基本數(shù)據(jù)結構以外,比如列表、字典、元組、字符串操作等等,還提供許多在寫代碼的過程中會經常使用的操作,例如正則表達式(re)、配置文件的創(chuàng)建和讀?。╫s)。良好的擴展性,python和c/c++語言具有很強的交互性,可以在python調用c的模塊,也可以在c調用python,對于一些對性能有高要求的模塊,還可以使用c編寫python模塊。Python的優(yōu)勢:簡單、學習成本低,容易閱讀和維護具有偽代碼的本質,使得在開發(fā)python應用程序的過程中,集中注意力去解決問題,而不是被各種各樣的代碼格式困擾。使用python開發(fā)的時候,不需要考慮內存管理這些底層問題。高可移植性,python已經被移植到各大平臺,linux、windows等等。豐富的標準庫,可以處理各種各樣的工作,單元測試、線程、數(shù)據(jù)庫、網頁瀏覽器。Python劣勢:運行速度,和許多語言相比,python的運行速度比較慢,有運行速度要求的話,可以使用c++語言重寫關鍵代碼。Python的開源是優(yōu)點也是缺點,python語言的源代碼不能加密,使用python開發(fā)的軟件內部代碼得不到保密。MySQL5.7MySQL是一種傳統(tǒng)的關系型數(shù)據(jù)庫工具,mysql的架構很開放,所以讓選擇使用mysql的用戶可以任意搭配其他工具使用。而且伴隨著mysql的各項技術逐漸的成熟,它的開源社區(qū)開發(fā)和維護的人也越來越多,支持的功能也越來越豐富,性能也在慢慢的變得更優(yōu)異,對不同平臺的支持數(shù)量也在增加。目前,mysql就因為它的功能穩(wěn)定、性能優(yōu)異、開發(fā)源代碼、沒有版權限制、使用成本低、歷史悠久、用戶活躍、遇到問題可以求助、安裝包小且安裝方便,便于個人或團隊維護,在遵守GRL協(xié)議的情況下,可以免費使用,還可以根據(jù)自己的條件進行適當?shù)亩伍_發(fā),所以非常受到世界各地程序員的喜歡。Mysql使用的是C/S架構,所以使用的時候,會有兩個程序同時運行。一個是mysql的主服務器進程,是指mysqld,運行在數(shù)據(jù)庫服務器上,專門負責在服務器上用來監(jiān)聽和處理來自客戶端發(fā)送的服務請求,然后根據(jù)這些請求的類型去對數(shù)據(jù)庫內容進行操作,最后返回有關的信息如查詢操作的數(shù)據(jù)庫數(shù)據(jù)回傳給客戶端。另一個當然就是mysql的客戶端進程,這個進程專門負責連接數(shù)據(jù)庫服務器,并且會通過發(fā)出各種類型命令(請求)來通知服務器用戶想要進行的操作。Mysql核心組成主要分為三部分:第一部分應該就是大部分基于網絡的客戶端/服務器端都有的部分,例mysql連接、授權認證登錄、安全等。第二部分是mysql的核心服務功能,包括查詢解析、分析和優(yōu)化及緩存還有所有的內置函數(shù),跨存儲引擎功能:存儲過程、觸發(fā)器、視圖。存儲引擎屬于最后一部分,它負責mysql中對數(shù)據(jù)的存放和提取,是mysql中最重要也是最最核心的部分,同樣也是mysql和其他數(shù)據(jù)庫能夠區(qū)分開來的一個重要特性。在mysql數(shù)據(jù)庫中,數(shù)據(jù)是通過數(shù)據(jù)庫表的形式出現(xiàn)的。每一行記錄的是各種記錄的名稱。每一列記錄是的名稱所對應的真實數(shù)據(jù)。許許多多的行和列就組成了一張數(shù)據(jù)庫表。許多數(shù)據(jù)庫表就構成了一個數(shù)據(jù)庫。GitGit是一個免費的開源分布式版本控制工具,目的是快速高效地處理從小型到大型項目的所有內容。開發(fā)人員可以通過git這個工具上傳到github、gitlab、gitee等免費的代碼保管庫中。Git優(yōu)點:適合多人,多版本,分布式開發(fā),強調每個開發(fā)的單獨性。對于公共服務器壓力和數(shù)據(jù)庫的壓力不大。速度非???,開發(fā)靈活性強。多個開發(fā)者之間可以快速簡單的解決之間的代碼沖突。Git缺點:資料少、學習成本高、學習周期長、代碼保密性查,一旦出現(xiàn)操作失誤的情況,就會公開所以代碼,從而造成代碼泄露。系統(tǒng)需求分析用戶需求分析本系統(tǒng)的用戶主要是三部分。第一部分,急切希望能夠物品能夠出租出去,得到有效的處理的人們。第二部分,急切需要某一些物品,但是全款買下,沒有那么多錢,所以選擇租這種經濟實惠、性價比高的方式的人群。最后一部分,短時間需要使用某一物品,但是過了這段時間,就完全沒有必要性使用這類物品,也不想要買這個物品的人群。本系統(tǒng)的目標是成為國民統(tǒng)一的租賃信息發(fā)布瀏覽平臺,具有強大的公信力。造福一方百姓。本物品租賃系統(tǒng)的設計與實現(xiàn)的關鍵點是高效率一鍵發(fā)布出租信息;用戶和用戶之前能夠及時有效的溝通;出租方和承租方的租賃交易快速成功;出租方和承租方之前沒有第三方的介入,減少中介費用。三種角色:出租方、承租方、系統(tǒng)管理員。出租方通過填寫簡單的物品信息,就能發(fā)布并且被想要此物品的人所看到。出租方和承租方能夠得到對方的聯(lián)系方式或者能夠及時的聊天溝通,從而快速的進入到下一個環(huán)節(jié)租賃交易的產生。出租方通過租這種經濟實惠的方式,能夠快速的得到他所需要的物品,中間也不會產生高額的中介費用。第三種,比如長期從事某表演行業(yè)或者建筑行業(yè),需要租賃表演服裝或者建筑工具。功能需求為了完成滿足用戶需求,為用戶提供高效的處理。完成物品租賃信息管理系統(tǒng),提升大家工作效率,合理調度出租方手中的待出租物品的資源,本物品租賃信息管理系統(tǒng)應該具有下面的功能用戶登錄注冊,完善基礎信息填寫部分。為用戶提供豐富的出租物品信息,方便用戶查找數(shù)據(jù),物品分類。根據(jù)用戶選擇的物品便簽分類。用戶能夠通過填寫簡單的信息進行快捷發(fā)布出租物品的信息。選擇物品分類的種類,添加描述和標題,填入用戶想要達到的金額,勾選特征標簽,填寫用戶基礎信息,進行實名認證。點擊發(fā)布,就能夠快捷進行出租物品發(fā)布用戶也同樣能夠通過搜索框,搜索關鍵字詞,發(fā)送請求,系統(tǒng)將會替用戶在數(shù)據(jù)庫中查詢現(xiàn)有出租物品的描述進行匹配,匹配成功,則響應請求,并且瀏覽器會幫助系統(tǒng)渲染整個頁面,返回查詢到的出租品牌,用戶根據(jù)返回查詢物品,點擊進入詳情頁面,用戶就可以看見出租物品的詳細信息服務詳情和商品簡介,還有出租方的聯(lián)系方式。點擊聊天,就可以直接和用戶(出租方)進行溝通為了用戶進行的交易活動的安全得到保障,出租方發(fā)布信息的時候需要進行相關實名認證的功能,發(fā)布的信息中不能出現(xiàn)敏感的文字,在用戶(承租方)想要進行租賃行為的時候,也必須提供身份證上有關信息,進行實名認證,等待實名認證通過,這個時候系統(tǒng)會自動調用有關實名認證接口,實名認證通過后,用戶(承租方)才能進行下一步租賃行為。生成租賃合同。租賃合同。系統(tǒng)自動生成租賃合同,用戶需要通過交付押金等方式來進行抵押,以防承租方不付租金的情況。在進行租賃活動時,用戶之間如果不通過本系統(tǒng)進行交易,換用線下直接租賃的行為,這之間有可能產生的任何問題造成的損失由出租方和承租方雙方共同承擔,本系統(tǒng)不付任何法律責任,也不會賠償任何損失。當用戶成功建立租賃合同之后,出租方通過物流等方式,將有關信息填入本系統(tǒng)流程中,逐步推進,承租方將通過支付租金和押金等功能,系統(tǒng)調用支付接口,先提前將資金匯入本系統(tǒng)公共賬號,暫時進行保管,每月或每年定時自動打入出租方賬號。性能需求分析對于一個軟件,其對系統(tǒng)性能的要求就是對于做出的操作有比較快的反應。打開網絡的時延根據(jù)網絡情況而定,應該盡可能滿足用戶需求。通過對市面上多種系統(tǒng)的分析,用戶對于可靠性的需求如下。如果用戶不進行登錄操作,則不能對系統(tǒng)進行訪問;用戶登錄后,可以對自己的數(shù)據(jù)進行訪問和操作,包括增加商品,修改商品信息,處理訂單以及對自己個人信息的修改;要成功使用用戶功能,必須在登錄時輸入正確的用戶名和密碼,用戶名和密碼不匹配者不可以使用上述功能。通過對市面的二手交易網站、租房網站、租車網站的用戶使用的安全需求進行分析,得出一對一交流是物品租賃網站系統(tǒng)的最重要的一步,出租方和承租方的事先交流,有利于減少租賃過程中因為與某一方預期不符導致的交易發(fā)生糾葛、租賃雙方對售后難達成統(tǒng)一意志的問題。還有另一個方面,本系統(tǒng)會采用嚴格的權限控制,用戶信息存儲在mysql中,實名信息不泄露。用戶只能看到自己的實名信息。審核人員通過管理員賬號登錄,也看不到普通用戶的實名信息。開發(fā)本系統(tǒng)資源使用需求:通過現(xiàn)有技術分析,依據(jù)本系統(tǒng)采用B/S架構和數(shù)據(jù)庫等技術,本物品租賃系統(tǒng)至少需要一臺配置了centos7的Linux系統(tǒng),配置至少一個CPU,2G運行內存,20G磁盤空間,1Mbps公網帶寬,一個主IPv4公網IP。MySQL服務器端運行環(huán)境要求最少一個CPU,2G運行內存,50G磁盤空間,1Mbps公網帶寬,一個主IPv4公網IP。數(shù)據(jù)流圖數(shù)據(jù)流圖(DataFlowDiagram):簡稱DFD,它從數(shù)據(jù)傳遞和加工角度,以圖形方式來表達系統(tǒng)的邏輯功能、數(shù)據(jù)在系統(tǒng)內部的邏輯流向和邏輯變換過程,是結構化系統(tǒng)分析方法的主要表達工具及用于表示軟件模型的一種圖示方法。數(shù)據(jù)流圖是結構化分析方法中使用的工具,它以圖形的方式描繪數(shù)據(jù)在系統(tǒng)中流動和處理的過程,由于它只反映系統(tǒng)必須完成的邏輯功能,所以它是一種功能模型。在結構化開發(fā)方法中,數(shù)據(jù)流圖是需求分析階段產生的結果。數(shù)據(jù)流圖或數(shù)據(jù)流程圖(DataFlowDiagram),縮寫為DFD。數(shù)據(jù)流圖是描述系統(tǒng)中數(shù)據(jù)流程的一種圖形工具,它標志了一個系統(tǒng)的邏輯輸入和邏輯輸出,以及把邏輯輸入轉換邏輯輸出所需的加工處理。值得注意的是,數(shù)據(jù)流圖不是傳統(tǒng)的流程圖或框圖,數(shù)據(jù)流也不是控制流。數(shù)據(jù)流圖是從數(shù)據(jù)的角度來描述一個系統(tǒng),而框圖是從對數(shù)據(jù)進行加工的工作人員的角度來描述系統(tǒng)。DFD顯示系統(tǒng)將輸入和輸出什么樣的信息,數(shù)據(jù)如何通過系統(tǒng)前進以及數(shù)據(jù)將被存儲在何處。它不顯示關于進程計時的信息,也不顯示關于進程將按順序還是并行運行的信息,而不像傳統(tǒng)的關注控制流的結構化流程圖,或者UML活動工作流程圖,它將控制流和數(shù)據(jù)流作為一個統(tǒng)一的模型。數(shù)據(jù)流圖從數(shù)據(jù)傳遞和加工的角度,以圖形的方式刻畫數(shù)據(jù)流從輸入到輸出的移動變換過程。圖3-1數(shù)據(jù)流圖Fig3-1Dataflowdiagram數(shù)據(jù)流程圖包括:指明數(shù)據(jù)存在的數(shù)據(jù)符號,這些數(shù)據(jù)符號也可指明該數(shù)據(jù)所使用的媒體;指明對數(shù)據(jù)執(zhí)行的處理的處理符號,這些符號也可指明該處理所用到的機器功能;指明幾個處理和(或)數(shù)據(jù)媒體之間的數(shù)據(jù)流的流線符號;便于讀、寫數(shù)據(jù)流程圖的特殊符號。在處理符號的前后都應是數(shù)據(jù)符號。數(shù)據(jù)流程圖以數(shù)據(jù)符號開始和結束,數(shù)據(jù)流圖有兩種典型結構,一是變換型結構,它所描述的工作可表示為輸入、主處理和輸出,呈線性狀態(tài)。另一種是事務型結構,這種數(shù)據(jù)流圖呈束狀,即一束數(shù)據(jù)流平行流入或流出,可能同時有幾個事務要求處理。本系統(tǒng)根據(jù)需求分析,依照以上的理論知識,確定了數(shù)據(jù)流圖,如圖3-1所示。E-R圖E-R圖也稱實體-聯(lián)系圖(EntityRelationshipDiagram),提供了表示實體類型、屬性和聯(lián)系的方法,用來描述現(xiàn)實世界的概念模型。它是描述現(xiàn)實世界關系概念模型的有效方法。本系統(tǒng)實體有用戶、物品、實名認證、操作、找回密碼、用戶日志、租賃記錄、標簽、分類。每個實體都設計了若干屬性。圖3-2用戶實體聯(lián)系圖Fig3-2Userentitycontactdiagram用戶實體的屬性是由賬號id、用戶名、密碼、頭像、頭像縮略圖、手機號、qq號、注冊時間、郵箱、是否可以登錄、是否活躍用戶組成,用戶實體和屬性之間的關系如圖3-2所示。實名實體的實體的屬性是賬號id、真實姓名、身份證號碼這些屬性,實名實體和屬性之間的關系如圖3-3所示。圖3-3實名實體聯(lián)系圖Fig3-3userreal-nameentitycontactdiagram用戶日志實體的屬性由賬號id、操作時間、統(tǒng)計類型id、操作id組成。用戶日志實體和屬性之間的聯(lián)系如圖3-4所示。圖3-4用戶日志實體聯(lián)系圖Fig3-4Userlogentitycontactdiagram操作實體的屬性是操作id、操作名稱。操作實體和屬性的關系如圖3-5所示。圖3-5操作實體聯(lián)系圖Fig3-5Useractionentitycontactdiagram密碼找回實體的屬性由賬號id、重置時間、驗證碼、重置狀態(tài)、郵箱。密碼找回實體和屬性之間的關系如圖3-6所示。圖3-6找回密碼實體聯(lián)系圖Fig3-6userretrievepasswordentitycontactdiagram出租物品實體的屬性有物品標簽、標識id、發(fā)布時間、物品標題、所屬用戶、物品詳情、物品發(fā)布審核狀態(tài)、數(shù)量、物品描述、押金、租金、所屬分類。出租物品實體和屬性之間的關系如圖3-7所示。圖3-7物品實體聯(lián)系圖Fig3-7objectentitycontactdiagram租賃記錄實體的屬性由記錄id、物品id、生成時間、導出位置、結束時間、賬號id。實體和屬性的關系如圖3-8所示。圖3-8租賃記錄實體聯(lián)系圖Fig3-8leaserecordentitycontactdiagram分類實體的屬性有分類id、分類名稱、物品id。分類實體和屬性之間的關系如圖3-9所示。圖3-9分類實體聯(lián)系圖Fig3-9Classificationentityconnectiondiagram圖3-10標簽實體聯(lián)系圖Fig3-10Labelentitycontactdiagram標簽實體的屬性有標簽id、標簽id、物品id。分類實體和屬性之間的關系如圖3-10所示。通過對上面的系統(tǒng)實體和屬性進行分析總結,得出系統(tǒng)的總體E-R結構圖,如圖3-11所示。圖-311系統(tǒng)整體E-R圖Fig3-11overalle-rdiagramofthesystem數(shù)據(jù)字典通過對用戶實體和用戶屬性的分析,根據(jù)得到用戶的數(shù)據(jù),進行用戶數(shù)據(jù)字典構造,如表3-1表3-1用戶數(shù)據(jù)字典Table3-1userdictionaries名稱描述定義用戶使用本系統(tǒng)的人用戶=賬號id+昵稱+密碼+聯(lián)系手機用戶id注冊用戶的標識符11{數(shù)字}11頭像注冊用戶的頭像4{圖像}20用戶昵稱注冊時取得別名2{漢字}8密碼被隱藏的機密信息8{數(shù)字|字母}20聯(lián)系手機賬號綁定的手機號碼11{數(shù)字}11QQ號聯(lián)系方式1{數(shù)字}14郵箱密碼找回的聯(lián)系方式8{數(shù)字|字母}20是否登錄登錄有沒有進行限制1{0|1}1是否活躍用戶賬號的活躍度1{0|1}1通過對用戶實名認證實體和其屬性的分析,根據(jù)得到實名認證的數(shù)據(jù),進行用戶實名認證數(shù)據(jù)字典構造,如表3-2表3-2實名認證數(shù)據(jù)字典Table3-2realnameauthenticationdictionary名稱描述定義真實姓名身份證的實名2{漢字}8標識id注冊后的標識符4{數(shù)字}8身份證號碼真實的身份證號碼18{數(shù)字}18密碼用戶登錄密碼8{數(shù)字|字母}20通過對用戶密碼找回實體和其屬性的分析,根據(jù)得到找回密碼的數(shù)據(jù),進行用戶找回密碼數(shù)據(jù)字典構造,如表3-3表3-3找回密碼數(shù)據(jù)字典Table3-3.Retrievepassworddictionary名稱描述定義重置時間用戶最近一次找回密碼的時間12{數(shù)字}12標識ID注冊后的標識符4{數(shù)字}8重置狀態(tài)密碼的發(fā)送狀態(tài)4{字母}8驗證碼找回密碼的驗證碼4{字母}8通過對物品分類實體和其屬性的分析,根據(jù)得到分類的數(shù)據(jù),進行分類數(shù)據(jù)字典構造,如表3-4表3-4分類數(shù)據(jù)字典Table3-4Classificationdictionaries名稱描述定義分類物品的所屬類別分類=分類名稱+分類id分類名稱訂單中的商品1{漢字}6分類ID下單的編號19{數(shù)字}20通過對物品實體和其屬性的分析,根據(jù)得到物品的數(shù)據(jù),進行物品數(shù)據(jù)字典構造,如表3-5表3-5物品數(shù)據(jù)字典Table3-5Itemdatadictionary名稱描述定義物品用戶出租的物品物品=標識ID+物品名+物品租金+物品押金+物品描述+物品數(shù)量+所屬用戶+發(fā)布時間+審核狀態(tài)標識ID發(fā)布后的標識符4{數(shù)字}8物品名物品的名字2{漢字}12物品租金物品現(xiàn)在的租金金額{數(shù)字}物品描述對物品的注解和說明0{漢字|數(shù)字|字母}200物品數(shù)量物品的存貨量{數(shù)字}用戶id歸屬的用戶id{數(shù)字}物品押金物品現(xiàn)在的押金金額{數(shù)字}發(fā)布時間用戶發(fā)布出租的時間12{數(shù)字}12審核狀態(tài)出租信息的審核狀態(tài)3{漢字}3物品數(shù)量物品的存貨量{數(shù)字}用戶id歸屬的用戶id{數(shù)字}物品押金物品現(xiàn)在的押金金額{數(shù)字}發(fā)布時間用戶發(fā)布出租的時間12{數(shù)字}12審核狀態(tài)出租信息的審核狀態(tài)3{漢字}3通過對租賃記錄實體和其屬性的分析,根據(jù)得到租賃記錄的數(shù)據(jù),進行物品租賃記錄交易數(shù)據(jù)字典構造,如表3-6表3-6租賃交易數(shù)據(jù)字典Table3-6Leasetransactiondictionary名稱描述定義租賃交易統(tǒng)計的分類租賃交易=出租方ID+承租方ID+交易ID+生成時間+結束時間+導出位置出租方ID出租用戶標識符4{數(shù)字}8承租方ID承租用戶標識符4{數(shù)字}8交易ID交易時生成的標識符4{數(shù)字}8生成時間交易生成時間12{數(shù)字}12結束時間交易結束時間12{數(shù)字}12導出位置交易記錄導出位置{字母|字符}系統(tǒng)概要設計系統(tǒng)概述前端拆分模板實現(xiàn)拼接,這樣不需要修改每一個前端頁面,只需要修改base頁面就可以實現(xiàn)每一個頁面統(tǒng)一部分的修改。通過api+ajax,實現(xiàn)頁面的局部的動態(tài)加載。不需要刷新整個頁面。使用redis數(shù)據(jù)庫存放seesion狀態(tài),利用django自帶的加密函數(shù)make_password實現(xiàn)密碼加密。使用裝飾器和權限管理限制用戶可以訪問的資源的權限,可以避免普通用戶惡意修改信息,生成釣魚網站使用查找、篩選、分頁和ckeditor富文本編輯器等功能,將數(shù)據(jù)庫內容進行分類、篩選功能作查詢并使用Django自帶的分頁顯示。系統(tǒng)功能設計本系統(tǒng)的大致功能如下:注冊。通過填寫用戶名,密碼,手機號碼和短信驗證碼等基本信息,進行注冊操作,成為本系統(tǒng)注冊用戶。注冊成功自動跳轉首頁。登錄。通過填寫注冊的用戶名,密碼,圖形驗證碼等信息,進行登錄操作。編輯個人信息。注冊用戶可以通過個人中心,查看或者編輯更改個人基礎信息。一鍵出租。出租方用戶可以通過添加發(fā)布想要出租的物品。用戶可以搜索關鍵字,搜索用戶所需要的物品。出租方用戶可以在個人中心,對自己所發(fā)布的出租信息進行增刪改等操作。用戶可以收藏你瀏覽到感興趣的物品,并且被收藏的物品可以在個人中心查詢到。找回密碼。用戶可以通過登錄界面的忘記密碼功能重置密碼,填寫相關信息,可以重置密碼。(前提是該用戶完善了自己的郵箱信息)避免惡意注冊。注冊時需要填寫手機號和接受到驗證碼。注冊用戶可以直接看到動態(tài)加載的出租信息,也可以選擇類別和標簽查詢想要的出租信息。管理員賬號。為了維護干凈的網絡環(huán)境,普通用戶發(fā)布的出租信息需要審核通過,才能被所有用戶所瀏覽。出租用戶可以通過個人中心查看發(fā)布的出租信息審核狀態(tài)。用戶需要實名認證之后才能選擇需要的物品進行交易。用戶中心。用戶可以上傳頭像(使用縮略圖避免圖片文件過大)、修高個人信息、更改密碼、查看個人租賃信息和狀態(tài)。本站用戶之間可以通過qq號或者電話號碼互相聯(lián)系,支付寶賬號交易。系統(tǒng)管理員成為中間人,提供保障,交易成功,自動生成租賃記錄和合同。審核人員通過登錄管理員賬戶,在用戶中心,對普通用戶的發(fā)布申請進行檢查,檢查通過后通過該申請。收藏功能。可以根據(jù)出租信息被收藏的次數(shù),從大到小自動生產每天的最熱榜單。誠信度??筛鶕?jù)用戶上一次進行的租賃情況,進行打分。該分數(shù)可以作為該用戶的誠信度,僅供參考。用戶發(fā)布出租信息時,可以使用富文本編輯器,編輯出租物品的詳細描述信息,使得給出租信息更吸引用戶瀏覽,增加用戶出租信息的可信度。系統(tǒng)體系結構根據(jù)以上的用戶需求和功能需求分析,主要設計了三個模塊:用戶信息管理、發(fā)布物品信息管理、租賃記錄管理。用戶信息管理主要有登錄、注冊、密碼找回的功能。發(fā)布物品信息管理主要由用戶實名認證、出租方用戶發(fā)布出租物品信息、出租方修改發(fā)布信息、管理員審核發(fā)布信息、用戶收藏心儀物品等功能組成。租賃記錄管理有導出出租記錄、出租方和承租方進行聊天交流等功能。詳細的系統(tǒng)體系結構如圖4-1。圖4-1系統(tǒng)體系結構圖Fig.4-1Systemarchitecturediagram數(shù)據(jù)庫表根據(jù)以上整個物品租賃系統(tǒng)的E-R圖,根據(jù)實體和屬性,設計了9張數(shù)據(jù)庫表,如表4-1所示。表4-1系統(tǒng)中所以數(shù)據(jù)庫表列表Table4-1listofalldatabasetablesinthesystem數(shù)據(jù)庫表名稱中文說明用途備注User用戶表存儲用戶信息—Authentication用戶實名認證表存儲實名認證用戶信息—FindPasswd找回密碼密碼找回表—Category分類表物品分類—Tag標簽表物品標簽—Goods物品表物品收藏表保存物品基礎信息—Collection租賃記錄表存儲物品租賃信息—Userlog用戶日志表保存用戶日志—Operate操作表保存用戶操作信息—對于本系統(tǒng)的所有用戶信息的存儲和管理,設計了用戶數(shù)據(jù)庫表,如表4-2。表4-2用戶表Table4-2usertable屬性名類型為空為主鍵為外鍵備注idvarchar(20)否是—賬號IDusernamevarchar(150)否——用戶昵稱Avator_sorvarchar(150)否——頭像Avator_smvarchar(150)否——頭像縮略圖passwordvarchar(30)否——密碼Mobilevarchar(11)否——手機號First_nameLast_namevarchar(8)varchar(2)是是————名姓QQEmailDate_joinedvarchar(11)varchar(11)DateTime是是否——————QQ號郵箱注冊時間Is_staffIs_activeBooleanBoolean否否————是否可以登錄是否活躍用戶對于本系統(tǒng)的所有用戶實名認證信息的存儲和管理,設計了用戶實名認證數(shù)據(jù)庫表,如表4-3。表4-3用戶實名認證表Table4-3userreal-nameauthenticationtable屬性名類型為空為主鍵為外鍵備注idvarchar(20)否是—賬號IDRealnamevarchar(8)是——真實姓名Id_cardvarchar(14)否——身份證號碼passwordvarchar(30)否——密碼iphonevarchar(11)是—是聯(lián)系手機對于本系統(tǒng)的所有用戶找回密碼的信息進行數(shù)據(jù)庫存儲和管理,設計了用戶找回密碼數(shù)據(jù)庫表,如表4-4。表4-4找回密碼表Table4-4retrievepasswordtable屬性名類型為空為主鍵為外鍵備注idint否是是標識IDCreate_pwdvarchar(50)否——重置時間Status_pwdvarchar(16)否——重置狀態(tài)Verifyvarchar(12)否——驗證碼對于本系統(tǒng)的所有發(fā)布物品信息的分類進行存儲和管理,設計了物品分類數(shù)據(jù)庫表,如表4-5。表4-5分類表Table4-5classificationtable屬性名類型為空為主鍵為外鍵備注Category_idint否是—分類IDCategory_nameChar(10)否——分類名稱對于本系統(tǒng)的所有發(fā)布物品信息的標簽進行存儲和管理,設計了物品標簽數(shù)據(jù)庫表,如表4-6。表4-6標簽表Table4-6labeltable屬性名類型為空為主鍵為外鍵備注Tag_idint否是是標簽IDTag_nameChar(10)否——標簽名對于本系統(tǒng)的所有發(fā)布物品信息進行存儲和管理,系統(tǒng)設計了物品數(shù)據(jù)庫表,如表4-7。表4-7物品表Table4-7itemstable屬性名類型為空為主鍵為外鍵備注idint否是是標識IDTitlevarchar(10)否——物品標題User_idint否—是所屬用戶Category_idTag_idIntint否否—是是所屬分類物品標簽ContentRichTextUploading是——物品詳情statusBoolean否——物品審核狀態(tài)RentDecimal否——租金DepositDecimal是——押金DescPub_timetxtdatetime是否——物品描述物品發(fā)布時間numberint否——商品數(shù)量對于本系統(tǒng)的所有發(fā)布物品信息的收藏信息進行存儲和管理,設計了物品收藏數(shù)據(jù)庫表,如表4-8表4-8物品收藏表Table4-8itemscollectiontable屬性名類型為空為主鍵為外鍵備注Collect_idint否是—標識IDStatusboolean否—收藏狀態(tài)Goodsint否—是物品idCreate_timedatetime否—收藏/取消時間Useridint否—是用戶id對于本系統(tǒng)的所有發(fā)布物品租賃信息進行存儲和管理,設計了物品租金記錄數(shù)據(jù)庫表,如表4-9。表4-9租賃記錄表Table4-9leaserecords屬性名類型為空為主鍵為外鍵備注User_id1int否—是出租方IDUser_id2int否—是承租方IDOrder_idint否是—合同idOrder_creatime_timedatatime否——生成時間Order_end_timedatatime否——結束時間addressvarchar(50)否——excel表導出位置statisticsint否—是統(tǒng)計類型ID對于本系統(tǒng)的所有用戶日志信息進行存儲和管理,設計了用戶日志數(shù)據(jù)庫表,如表4-10。表4-10用戶日志表Table4-10userlogtable屬性名類型為空為主鍵為外鍵備注usernamevarchar(20)否是是用戶IDAction_timedatatime否——操作時間addressvarchar(50)否——excel表導出位置statisticsint否—是統(tǒng)計類型IDActionvarchar(10)否—是操作名稱對于本系統(tǒng)的所有用戶操作信息進行存儲和管理,系統(tǒng)設計了操作數(shù)據(jù)庫表,如表4-11。表4-11操作表Table4-11operationtable屬性名類型為空為主鍵為外鍵備注Operate_Idint否是是操作IDactionvarchar(10)否是操作名稱界面設計根據(jù)本系統(tǒng)的需求分析以及功能設計和數(shù)據(jù)庫表設計,介紹一下我設計的部分界面:主界面、登錄界面、注冊界面、個人信息界面。首先介紹的是本系統(tǒng)的登錄頁面。用戶輸入已注冊的用戶名和密碼,填寫對應的圖形驗證碼,點擊登錄。還有用戶注冊和忘記密碼按鈕。界面設計如圖4-2所示圖4-2登錄界面設計圖Fig4-2Designdiagramofthelogininterface現(xiàn)在介紹的是本系統(tǒng)的注冊頁面。用戶輸入已注冊的用戶名和密碼、二次確認密碼、手機號,填寫對應的短信驗證碼,點擊登錄。還有用戶登錄按鈕。界面設計如圖4-3所示。圖4-3注冊界面設計圖Figure4-3registrationpagedesign現(xiàn)在介紹的是本系統(tǒng)的個人信息頁面。左上角是系統(tǒng)名稱,右上角是搜索框、頭像和用戶名,點擊用戶名,可以跳轉到個人信息界面,左部分時功能鍵,有部分是顯示對應的信息或功能。界面設計如圖4-4所示。圖4-4個人信息界面設計圖Figure4-4Personalinformationinterfacedesigndrawing現(xiàn)在介紹的是本系統(tǒng)的首頁。左上角是系統(tǒng)名稱,右上角是搜索框、頭像和用戶名,點擊用戶名,可以跳轉到個人信息界面,主頁主要是瀏覽出租方的出租信息和用戶廣場,右部分時用戶的交易信息,交易信息下面是熱門排行,主要是根據(jù)所有用戶的收藏數(shù)來排序的。界面設計如圖4-5所示。圖4-5主界面設計圖Figure4-5Maininterfacedesigndrawing系統(tǒng)詳細設計用戶模塊用戶通過注冊成為本web系統(tǒng)用戶,注冊成功自動跳轉首頁。首頁做了權限控制,檢查用戶是否登錄,沒有登錄會自動跳轉登錄界面。通過填寫注冊的用戶名,密碼,圖形驗證碼等信息,進行登錄操作。注冊用戶可以通過個人中心,查看或者編輯更改個人基礎信息。出租方用戶可以在個人中心,對自己所發(fā)布的出租信息進行增刪改等操作。出租用戶可以通過個人中心查看發(fā)布的出租信息審核狀態(tài)。用戶可以上傳頭像(使用縮略圖避免圖片文件過大)、修高個人信息、更改密碼、查看個人租賃信息和狀態(tài)。用戶通過填寫賬號、賬戶密碼、圖型驗證碼等信息,前臺會檢查輸入是否合法,并給出提醒。輸入合法,前臺提交post請求給后臺,后臺檢查該賬號是否存在于本物品租賃系統(tǒng)的數(shù)據(jù)庫中,如果不存在,前臺提醒賬戶不存在,并自動跳轉到注冊頁面。簡單的前臺流程如圖5-1所示。圖5-1登錄流程圖Fig5-1Loginflowchart用戶通過在前臺填寫用戶名、密碼、確認密碼、手機號等信息,前臺檢查輸入是否合法,并給出提醒,輸入合法,前臺提交post請求給后臺,后臺檢查該手機號是否存在于本物品租賃系統(tǒng)的數(shù)據(jù)庫中,如果存在,前臺提醒手機號存在,已經被注冊。不存在,后臺觸發(fā)發(fā)送6位數(shù)字短信驗證碼接口。用戶把手機接收得到的驗證碼填入驗證碼框,后臺檢查通過,前臺提示用戶注冊成功。自動跳轉主頁。具體流程如圖5-2所示圖5-2注冊流程圖Fig5-2Registrationflowchart出租模塊出租方用戶可以通過添加發(fā)布想要出租的物品。用戶可以搜索關鍵字,搜索用戶所需要的物品。用戶可以收藏你瀏覽到感興趣的物品,并且被收藏的物品可以在個人中心查詢到。設置管理員角色。避免普通用戶惡意發(fā)布信息,普通用戶發(fā)布的出租信息需要審核通過,才能被所有用戶所瀏覽。審核人員通過登錄管理員賬戶,在用戶中心,對普通用戶的發(fā)布申請進行檢查,檢查通過后通過該申請。出租方前臺通過輸入物品標題、物品分類、物品標簽、物品圖片詳情等信息,提交發(fā)布申請,等待管理員審核。審核不合格,重新修改物品信息在提交審核。審核通過,該發(fā)布信息就會出現(xiàn)在首頁,提供給大家瀏覽。詳細流程圖見圖5-3。圖5-3發(fā)布出租信息流程圖Fig5-3releaserentalinformationflowchart租賃交易模塊用戶需要實名認證之后才能選擇需要的物品進行交易。本站用戶之間可以通過qq號或者電話號碼互相聯(lián)系,支付寶賬號交易。系統(tǒng)成為中間人,提供保障,交易成功,自動生成租賃記錄和合同。用戶通過瀏覽首頁,或搜索欄搜索關鍵字進行查詢。點擊物品詳情頁面,進入交易,交易前,雙方必須先通過實名認證才能進行安全的交易。前臺輸入真實姓名和身份證號碼,認證成功,交易繼續(xù)。選擇租賃方式,達成交易合同。具體流程見圖5-4。圖5-4租賃流程圖Fig.5-4leasingflowchart系統(tǒng)實現(xiàn)(1)用戶修改頭像classChangeAvator(LoginRequiredMixin,View):

defpost(self,request):

today=datetime.date.today().strftime("%Y%m%d")

#圖片的data-img格式=>data:image/jpg;base64,xxxx

img_src_str=request.POST.get("image")

img_str=img_src_str.split(',')[1]

#取出格式:jpg/png...

img_type=img_src_str.split(';')[0].split('/')[1]

#取出數(shù)據(jù):轉化為bytes格式

img_data=base64.b64decode(img_str)

#相對上傳路徑:頭像上傳的相對路徑

avator_path=os.path.join("avator",today)

#絕對上傳路徑:頭像上傳的絕對路徑

avator_path_full=os.path.join(MEDIA_ROOT,avator_path)

ifnotos.path.exists(avator_path_full):

os.mkdir(avator_path_full)

filename=str(time.time())+"."+img_type

#絕對文件路徑,用于保存圖片

filename_full=os.path.join(avator_path_full,filename)

#相對MEDIA_URL路徑,用于展示數(shù)據(jù)

img_url="{}{}/{}".format(MEDIA_URL,avator_path,filename)

try:

withopen(filename_full,'wb')asfp:

fp.write(img_data)

ret={

"result":"ok",

"file":img_url

}

exceptExceptionasex:

ret={

"result":"error",

"file":"uploadfail"

}

request.user.avator_sor=os.path.join(avator_path,filename)

request.user.save()

returnJsonResponse(ret)(2)輸入手機號注冊發(fā)送驗證碼defget_mobile_captcha(request):

ret={"code":200,"msg":"驗證碼發(fā)送成功!"}

try:

mobile=request.GET.get("mobile")

ifmobileisNone:raiseValueError("手機號不能為空!")

mobile_captcha="".join(random.choices('0123456789',k=6))

fromdjango.core.cacheimportcache

#將短信驗證碼寫入redis,300s過期

cache.set(mobile,mobile_captcha,300)

(mobile,mobile_captcha,300)

ifnotsms.send_sms(mobile,mobile_captcha):

raiseValueError('發(fā)送短信失敗')

exceptExceptionasex:

logger.error(ex)

ret={"code":400,"msg":"驗證碼發(fā)送失?。?}

returnJsonResponse(ret)(3)未登錄用戶訪問攔截deflogin_required(function=None,redirect_field_name=REDIRECT_FIELD_NAME,login_url=None):

"""

用于檢查用戶是否已登錄并重定向的視圖的裝飾器。如有需要,轉到登錄頁。

"""

actual_decorator=user_passes_test(

lambdau:u.is_authenticated,

login_url=login_url,

redirect_field_name=redirect_field_name

)

iffunction:

returnactual_decorator(function)

returnactual_decorator@login_required#登錄限制

defindex(requeset):

#從用戶日志取操作

userlog=UserLog.objects.all()[:10]

operator=dict(UserLog.OPERATE)

forloginuserlog:

log.operate_cn=operator[int(log.operate)]

recent_user_ids=[item['user']foriteminUserLog.objects.filter(operate=3).values('user').distinct()[:10]]

recent_user=User.objects.filter(id__in=recent_user_ids)

kwgs={

"userlog":userlog,

'recent_user':recent_user,

}

#print(kwgs)

returnrender(requeset,"index.html",kwgs)(4)登錄時驗證圖形驗證碼defget_captcha(request):

#直接在內存開辟一點空間存放臨時生成的圖片

f=BytesIO()

#調用check_patcha_code生成照片和驗證碼

img,code=patcha.create_validate_code()

#將驗證碼存在服務器的session中,用于校驗

request.session['captcha_code']=code

#生成的驗證碼圖片放置配置的內存數(shù)據(jù)庫redis中

img.save(f,'PNG')

#將內存數(shù)據(jù)庫redis中的數(shù)據(jù)讀取出來,轉化為base64格式

ret_type="data:image/jpg;base64,".encode()

ret=ret_type+base64.encodebytes(f.getvalue())

delf

returnHttpResponse(ret)

#判斷驗證碼是否正確,返回驗證結果

defcheck_captcha(request):

ret={"code":400,"msg":"驗證碼錯誤!"}

post_captcha_code=request.GET.get('captcha_code')

session_captcha_code=request.session['captcha_code']

print(post_captcha_code,session_captcha_code)

ifpost_captcha_code.lower()==session_captcha_code.lower():

ret={"code":200,"msg":"驗證碼正確"}

returnJsonResponse(ret)(5)配置文件中主要配置代碼#注意:在此之前需要配置MEDIA_URL和MEDIA_ROOT

#配置媒體文件路徑

MEDIA_ROOT=os.path.join(BASE_DIR,'media')

ifnotos.path.exists(MEDIA_ROOT):

os.mkdir(MEDIA_ROOT)

MEDIA_URL='/media/'

#單位:px

THUMB_SIZE=70

ifnotos.path.exists(MEDIA_ROOT):

os.mkdir(MEDIA_ROOT)

#修改上傳文件大小(Default:2621440(i.e.2.5MB).)

DATA_UPLOAD_MAX_MEMORY_SIZE=2621440*10

#CKEditor配置

#真實路徑為:MEDIA_URL+CKEDITOR_UPLOAD_PATH(MEDIA_ROOT/CKEDITOR_UPLOAD_PATH)

CKEDITOR_UPLOAD_PATH="ckeditor_upload"#根url配置名稱ROOT_URLCONF='question_repo.urls'#靜態(tài)文件的查找路徑

STATIC_URL='/static/'

STATICFILES_DIRS=[

os.path.join(os.path.join(BASE_DIR,"static"))

]#redis服務器具體配置CACHES={

'default':{

#BACKEND配置緩存后端為RedisCache

'BACKEND':'django_redis.cache.RedisCache',

#LOCATION配置redis服務器地址

'LOCATION':'redis://56:6379',

"OPTIONS":{

"CLIENT_CLASS":"django_redis.client.DefaultClient",

"PASSWORD":"rootroot",

},

},

}#配置發(fā)送郵件

DEFAULT_FROM_EMAIL='xxxxxxxxxxx@'

#163郵箱SMTP服務器地址

EMAIL_HOST=''

#發(fā)件人的郵箱

EMAIL_HOST_USER='xxxxxxxxxxx@'

#發(fā)件人郵箱密碼

EMAIL_HOST_PASSWORD='iasaxjxzhbatgfja'

#tls協(xié)議,有True和False兩種情況

EMAIL_USE_TLS=True

#發(fā)件人的郵箱

EMAIL_FROM='xxxxxxxxxxx@'#配置日志打印器

#配置日志路徑

LOG_ROOT=os.path.join(BASE_DIR,'logs')

ifnotos.path.exists(LOG_ROOT):

os.mkdir(LOG_ROOT)

#日志格式

LOGGING={

'version':1,

'disable_existing_loggers':True,

'formatters':{

'standard':{

'format':'%(asctime)s[%(threadName)s:%(thread)d][%(name)s:%(lineno)d][%(module)s:%(funcName)s][%(levelname)s]-%(message)s'}#日志格式

},

'filters':{

},

'handlers':{

'mail_admins':{

'level':'ERROR',

'class':'django.utils.log.AdminEmailHandler',

'include_html':True,

},

'default':{

'level':'DEBUG',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'all.log'),#日志輸出文件

'maxBytes':1024*1024*5,#文件大小

'backupCount':5,#備份份數(shù)

'formatter':'standard',#使用哪種formatters日志格式

},

'error':{

'level':'ERROR',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'error.log'),

'maxBytes':1024*1024*5,

'backupCount':5,

'formatter':'standard',

},

'console':{

'level':'DEBUG',

'class':'logging.StreamHandler',

'formatter':'standard'

},

'request_handler':{

'level':'DEBUG',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'script.log'),

'maxBytes':1024*1024*5,

'backupCount':5,

'formatter':'standard',

},

'scripts_handler':{

'level':'DEBUG',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'script.log'),

'maxBytes':1024*1024*5,

'backupCount':5,

'formatter':'standard',

},#配置accounts的日志打印器,打印級別,輸出文件名

'account_handler':{

'level':'DEBUG',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'account.log'),

'maxBytes':1024*1024*5,

'backupCount':5,

'formatter':'standard',

},#配置apis的日志打印器,打印級別,輸出文件名

'apis_handler':{

'level':'DEBUG',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'apis.log'),

'maxBytes':1024*1024*5,

'backupCount':5,

'formatter':'standard',

'encoding':'utf-8',

},#配置goods的日志打印器,打印級別,輸出文件名

'repo_handler':{

'level':'DEBUG',

'class':'logging.handlers.RotatingFileHandler',

'filename':os.path.join(LOG_ROOT,'repo.log'),

'maxBytes':1024*1024*5,

'backupCount':5,

'formatter':'standard',

}

},

'loggers':{

#'django':{

#'handlers1':['console'],

#'level':'DEBUG',

#'propagate':False

#},

'account':{

'handlers':['account_handler','console'],

'level':'DEBUG',

'propagate':False

},

'apis':{

'handlers':['apis_handler','console'],

'level':'DEBUG',

'propagate':False

},

'repo':{

'handlers':['repo_handler','console'],

'level':'DEBUG',

'propagate':False

},

}

}系統(tǒng)測試軟件測試是保證軟件質量和提高軟件產品可靠性的主要手段之一,在軟件生存周期中占有重要地位。持續(xù)集成系統(tǒng)在項目的編碼階段進行了大量的靜態(tài)測試,及時發(fā)現(xiàn)了很多問題,通過不斷的修改和測試,使系統(tǒng)趨于完善,系統(tǒng)還進行了功能測試,檢查軟件的功能是否與需求一致。測試術語Unittesting(單元測試),指一段代碼的基本測試,其實際大小是未定的,通常是一個函數(shù)或子程序,一般由開發(fā)者執(zhí)行。Integrationtesting(集成測試)被測試系統(tǒng)的所有組件都集成在一起,找出被測試系統(tǒng)組件之間關系和接口中的錯誤。該測試一般在單元測試之后進行。

Acceptancetesting(驗收測試),系統(tǒng)開發(fā)生命周期方法論的一個階段,這時相關的用戶和/或獨立測試人員根據(jù)測試計劃和結果對系統(tǒng)進行測試和接收。它讓系統(tǒng)用戶決定是否接收系統(tǒng)。它是一項確定產品是否能夠滿足合同或用戶所規(guī)定需求的測試。這是管理性和防御性控制。Blackboxtesting(黑盒測試),指測試人員不關心程序具體如何實現(xiàn)的一種測試方法。根據(jù)軟件的規(guī)格對軟件進行各種輸入和觀察軟件的各種輸出結果來發(fā)現(xiàn)軟件的缺陷的測試,這類測試不考慮軟件內部的運作原理,因此軟件對用戶來說就像一個黑盒子。AutomatedTesting(自動化測試),使用自動化測試工具來進行測試,這類測試一般不需要人干預,通常在GUI、性能等測試中用得較多。Bug(錯誤),有時稱作defect(缺陷)或error(錯誤),軟件程序中存在的編程錯誤,可能會帶來不必要的副作用,軟件的功能和特性與設計規(guī)格說明書或用戶需求不一致的方面。軟件缺陷表現(xiàn)特征為:軟件未達到產品說明書標明的功能;軟件出現(xiàn)產品說明書指明不會出現(xiàn)的錯誤;軟件功能超出產品說明書指明的范圍;雖然產品說明書未指出但是軟件應達到的目標;軟件測試人員或用戶認為軟件難以理解,不易使用,運行速度緩慢等問題。Bugreport(錯誤報告),也稱為“Bugrecord(錯誤記錄)”,記錄發(fā)現(xiàn)的軟件錯誤信息的文檔,通常包括錯誤描述、復現(xiàn)步驟、抓取的錯誤圖像和注釋等。測試步驟首先,根據(jù)需求分析和原型圖,確認軟件的需求第二步,編寫所以功能點的測試用例,進一步理清項目思路、以及項目的具體功能細節(jié),培養(yǎng)自己的測試思維,使得在測試的時候能夠對需求更新清晰,測試用例編寫完成之后,需要提交對應的項目日志。第三步,功能測試,走通主流程,出現(xiàn)bug及時修改。關注每個端口的每個功能的實現(xiàn),直到沒有阻礙和bug,所以功能點都按預期實現(xiàn)。第四步,系統(tǒng)測試和兼容性測試,每個端口,每個頁面的交互和跳轉都能正常實現(xiàn)。Web系統(tǒng)需要兼容市面上的主流瀏覽器,如谷歌瀏覽器。第五步,編寫測試報告,項目測試過程結束后,需要馬上提交編寫的測試報告,把測試報告的情況和過程還有處理結果編寫成規(guī)范的文檔,還需要對上面的步驟中存在的問題和bug進行分析總結。測試技術黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序接口進行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當?shù)亟邮蛰斎霐?shù)據(jù)而產生正確的輸出信息。黑盒測試著眼于程序外部結構,不考慮內部邏輯結構,主要針對軟件界面和軟件功能進行測試。黑盒測試的優(yōu)點:適用于功能測試、可用性測試及可接受性測試;對照說明書測試程序功能;可測試長的、復雜的程序的工作邏輯,易被理解。白盒測試又稱結構測試、透明盒測試、邏輯驅動測試或基于代碼的測試。白盒測試是一種測試用例設計方法,盒子指的是被測試的軟件,白盒指的是盒子是可視的,即清楚盒子內部的東西以及里面是如何運作的。"白盒"法全面了解程序內部邏輯結構、對所有邏輯路徑進行測試。"白盒"法是窮舉路徑測試。在使用這一方案時,測試者必須檢查程序的內部結構,從檢查程序的邏輯著手,得出測試數(shù)據(jù)。貫穿程序的獨立路徑數(shù)是天文數(shù)字。優(yōu)點:迫使測試人員去仔細思考軟件的實現(xiàn);可以檢測代碼中的每條分支和路徑;揭示隱藏在代碼中的錯誤;對代碼的測試比較徹底。讓軟件最優(yōu)化。白盒測試技術(WhiteBoxTesting):深入到代碼一級的測試,使用這種技術發(fā)現(xiàn)問題最早,效果也是最好的。該技術主要的特征是測試對象進入了代碼內部,根據(jù)開發(fā)人員對代碼和對程序的熟悉程度,對有需要的部分進行在軟件編碼階段,開發(fā)人員根據(jù)自己對代碼的理解和接觸所進行的軟件測試叫做白盒測試。這一階段測試以軟件開發(fā)人員為主,在JAVA平臺使用Xunit系列工具進行測試,Xunit測試工具是類一級的測試工具對每一個類和該類的方法進行測試。黑盒測試技術(BlackBoxTesting):黑盒測試的內容主要有以下幾個方面,但是主要還是功能部分。主要是覆蓋全部的功能,可以結合兼容,性能測試等方面進行,根據(jù)軟件需求,設計文檔,模擬客戶場景隨系統(tǒng)進行實際的測試,這種測試技術是使用最多的測試技術涵蓋了測試的方方面面,可以考慮正確性、可用性、邊界條件、性能、壓力測試、錯誤恢復、安全性測試、兼容性。功能測試用

溫馨提示

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

評論

0/150

提交評論