版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中中 文文 摘摘 要要伴著互聯(lián)網(wǎng)技術(shù)的全面普及與飛速發(fā)展,很多技術(shù)都實(shí)現(xiàn)了開(kāi)源。而開(kāi)源技術(shù)如何被廣為人知,博客系統(tǒng)正好可以滿足這個(gè)需求。博客系統(tǒng)可以進(jìn)行朋友間的互動(dòng)交流,發(fā)布自己感興趣的話題和技術(shù),內(nèi)容豐富。提供個(gè)人的總結(jié)和交流,結(jié)交更多的朋友和表達(dá)自己的想法。博客可以隨時(shí)發(fā)布,方便而便捷。此次畢業(yè)設(shè)計(jì)采用 python 語(yǔ)言開(kāi)發(fā)一個(gè)博客系統(tǒng),系統(tǒng)使用eclipse 開(kāi)發(fā)平臺(tái),在開(kāi)發(fā)環(huán)境中,對(duì)該軟件進(jìn)行設(shè)計(jì)和相關(guān)模塊的編碼和調(diào)試。數(shù)據(jù)庫(kù)使用 SQLite。系統(tǒng)運(yùn)行流暢,各個(gè)模塊分工明確,有良好的交互性。使得使用者在交流時(shí),體會(huì)到簡(jiǎn)潔方便。整個(gè)博客系統(tǒng)擁有郵箱認(rèn)證,發(fā)表并且評(píng)論博文的功能。查看博
2、主資料,并且關(guān)注博主的功能,達(dá)到博客系統(tǒng)的交流功能。關(guān)鍵字關(guān)鍵字 python 博客系統(tǒng) SQLite eclipse 外外文文摘摘要要T Ti it tl le e The design and implementation of blog system based on Python AbstractAbstractWith the popularity of Internet technology and the rapid development, many technologies have achieved open source. And how open source tech
3、nology is widely known, the blog system can meet this demand. Blog system can be a friend of the interaction between the exchange, publishing their own interest in the topic and technology, rich in content. Provide personal summary and communication, make more friends and express their ideas. Blog c
4、an be released at any time, convenient and convenient.This graduation design uses Python language to develop a blog system, the system uses the eclipse development platform. In the development environment, the design of the software and the coding and debugging of the related modules are carried out
5、. Database using SQLite. So that users in the exchange, to realize the simple and convenient. The entire blog system has a mailbox certification, published and commented on the function of blog posts. View the main information, and pay attention to the bloggers function, to achieve the communication
6、 function of the blog system.keywordskeywords Python, Blog system, SQLite, Eclipsei目錄前言.1第一章 緒論.21.1 課題背景 .21.2 課題意義 .2第二章 系統(tǒng)主要技術(shù)簡(jiǎn)介 .42.1 PYTHON簡(jiǎn)介 .42.2 SQLITE簡(jiǎn)介 .52.3 ECLIPSE簡(jiǎn)介 .6第三章 系統(tǒng)需求與分析 .73.1 系統(tǒng)功能需求 .73.2 開(kāi)發(fā)環(huán)境需求 .11第四章 系統(tǒng)設(shè)計(jì) .124.1 系統(tǒng)功能設(shè)計(jì).124.2 數(shù)據(jù)庫(kù)設(shè)計(jì) .16第五章 系統(tǒng)功能模塊實(shí)現(xiàn) .195.1 注冊(cè)及用戶認(rèn)證 .195.2 用戶資料 .
7、215.3 博客文章 .235.4 關(guān)注作者 .245.5 評(píng)論管理 .25第六章 系統(tǒng)測(cè)試 .276.1 測(cè)試環(huán)境 .276.2 測(cè)試目的 .276.3 測(cè)試內(nèi)容 .27ii6.4 測(cè)試實(shí)例 .29第七章 總結(jié).35參考文獻(xiàn) .36致謝.371前言隨著互聯(lián)網(wǎng)技術(shù)的普及與飛速發(fā)展,信息文化之間的交流也得到了渠道的拓展。在本次畢業(yè)設(shè)計(jì)中,采用 Python 技術(shù)進(jìn)行 WEB 開(kāi)發(fā),涉及到構(gòu)想設(shè)計(jì)思路、實(shí)現(xiàn)功能方法、解決異常步驟等等,這與以開(kāi)發(fā)的 Java 工程一樣。唯一不同的是本次使用的 Python 語(yǔ)言開(kāi)發(fā),是一種新的體驗(yàn)。在一定程度上,我覺(jué)得本次畢業(yè)設(shè)計(jì)還算是比較順利,雖然引進(jìn)了不少新技術(shù)
8、,也遇到新的難題,但在不斷的摸索中,都逐一解決了。 博客從 2002 年開(kāi)始引入中國(guó),當(dāng)時(shí)數(shù)量不足 1 萬(wàn)人。blog 的中文名“博客”由方興東、王俊秀提出的。因?yàn)榱餍?、?shí)用的特點(diǎn),所以開(kāi)發(fā)博客系統(tǒng)讓我對(duì)此次畢業(yè)設(shè)計(jì)提高了很大興趣,郵箱服務(wù)器發(fā)送郵件、時(shí)間的本地化、正則匹配的應(yīng)用、數(shù)據(jù)庫(kù)之間的關(guān)系等等問(wèn)題也困擾了好久。在這過(guò)程中,設(shè)計(jì)思路逐漸明了,直至問(wèn)題逐一解決。事實(shí)上,解決開(kāi)發(fā)過(guò)程中遇到的問(wèn)題時(shí),并沒(méi)有那么容易,每一次對(duì)問(wèn)題的克服都是對(duì)程序代碼的一種熟悉和理解。本次設(shè)計(jì),主要有登錄模塊、博客文章管理模塊、評(píng)論模塊、用戶資料模塊、熱點(diǎn)博客模塊。登錄模塊負(fù)責(zé)檢驗(yàn)用戶的有效性,防止惡意的攻擊,擁
9、有郵箱的驗(yàn)證。博客管理模塊中,用戶可以編輯自己想發(fā)布的一些文章和修改這些文章,用戶可以使用 markdown 的語(yǔ)法來(lái)讓文章更加正規(guī)化。評(píng)論模塊中,登錄用戶可以對(duì)任何文章進(jìn)行評(píng)論,評(píng)論顯示在文章的下方。言論管理員可以對(duì)評(píng)論進(jìn)行管理,如有言論不正當(dāng)?shù)?,也可以將言論屏蔽。熱點(diǎn)博客將博客顯示按照評(píng)論進(jìn)行排序,顯示熱度高的博客。2第一章 緒論1.1 課題背景在博客系統(tǒng)沒(méi)有被開(kāi)發(fā)使用之前,網(wǎng)民們經(jīng)常會(huì)瀏覽一些發(fā)布論壇的網(wǎng)站,發(fā)表文章觀點(diǎn)或者通過(guò)類似于騰訊 QQ 中的空間,來(lái)表達(dá)內(nèi)心的看法與見(jiàn)解,可是通過(guò)使用這些媒介發(fā)布的文章都是零散的、雜亂無(wú)章的。博客系統(tǒng)的出現(xiàn),使用者可以把自己身處的境遇而激發(fā)的想法或
10、者感受,通過(guò)博客系統(tǒng)發(fā)布到網(wǎng)站上與大家一起分享。每次編寫博文的時(shí)候,又會(huì)想到一些新奇的想法。雖然某些想法可能沒(méi)有什么深度,但是沒(méi)打一個(gè)字都是對(duì)生活中所遇到事的一種思考與總結(jié),洋洋灑灑的寫完一篇博文會(huì)得到一種滿足感,一種對(duì)自己當(dāng)回作家的滿足感。生活中的點(diǎn)滴小事都會(huì)使人們迸發(fā)奇思妙想,甚至是和親戚朋友一次的談天中的想法。監(jiān)督自己把學(xué)到的東西或者是遇到困難的解決方案,亦或是對(duì)生活瑣事的有感而發(fā),這都是編寫博客的目的。督促自己每天做好總結(jié)和反思,一天中學(xué)到了什么,遇到了什么困難,體會(huì)到了什么感受。很多各界的精英們也踏上了使用博客的道路。譬如記者、明星、企業(yè)等都有了自己的博客網(wǎng)站,形成了一種獨(dú)特的百家爭(zhēng)
11、鳴的狀態(tài)。企業(yè)界引入博客系統(tǒng),為的是分享公司內(nèi)部的一些學(xué)習(xí)資料和網(wǎng)絡(luò)營(yíng)銷策略。教育部門引進(jìn)博客系統(tǒng),為的是管理內(nèi)部的知識(shí)倉(cāng)庫(kù)和溝通教學(xué)方法。又如程序員使用博客系統(tǒng)來(lái)介紹自己的系統(tǒng)項(xiàng)目,將項(xiàng)目開(kāi)源化。不僅可以讓其他用戶學(xué)習(xí)新知識(shí),也可以對(duì)項(xiàng)目進(jìn)行改進(jìn)和擴(kuò)展。1.2 課題意義博客的發(fā)展適應(yīng)了全球范圍內(nèi)知識(shí)社會(huì)來(lái)臨的發(fā)展腳步。由于我國(guó)處于一個(gè)組織機(jī)構(gòu)信息化的初級(jí)階段,博客是一種充分發(fā)揮個(gè)人主導(dǎo)能力和具有積極意義的非正式知識(shí)管理工具還具有深度溝通交流的功能,博客系統(tǒng)的意義在于傳播我們國(guó)家的知識(shí)、擴(kuò)散知識(shí)和有效提升組織的學(xué)習(xí)和創(chuàng)新能。博客系統(tǒng)用戶的急劇增長(zhǎng)以及系統(tǒng)得到廣泛領(lǐng)域的應(yīng)用,有助于推動(dòng)中國(guó)學(xué)習(xí)型
12、社會(huì)發(fā)展腳步。 本系統(tǒng)結(jié)合中國(guó)現(xiàn)實(shí)的情況以及博客互動(dòng)性的特點(diǎn)進(jìn)行設(shè)計(jì)開(kāi)發(fā),旨在為用戶3提供一個(gè)技術(shù)、學(xué)習(xí)、交流的平臺(tái),促進(jìn)用戶之間的溝通;并根據(jù)博客共享性的特點(diǎn),推動(dòng)用戶間的知識(shí)交流,使博客系統(tǒng)成為一個(gè)知識(shí)分享的園地。此次畢業(yè)設(shè)計(jì)的意義在于運(yùn)用在學(xué)校學(xué)到的技術(shù)和在學(xué)校培養(yǎng)的自學(xué)能力進(jìn)行獨(dú)立設(shè)計(jì)一個(gè)系統(tǒng)。通過(guò)深入社會(huì)實(shí)踐、了解社會(huì)結(jié)構(gòu)、完成畢業(yè)設(shè)計(jì)任務(wù)并且撰寫論文等,著重培養(yǎng)我們的綜合分析能力和解決問(wèn)題的能力和提高獨(dú)立性、管理組織和提高社交能力。運(yùn)用在公司學(xué)到的知識(shí)加以應(yīng)用,和公司同事加強(qiáng)技術(shù)交流,提升技術(shù)和社交能力。這也是對(duì)自身在學(xué)校學(xué)到的知識(shí)和自身自學(xué)能力的檢驗(yàn)。本次所用到的技術(shù)為 pyth
13、on 語(yǔ)言,此前并沒(méi)有在學(xué)校學(xué)過(guò),是對(duì)綜合素質(zhì)與工程實(shí)踐能力培養(yǎng)效果的全面檢驗(yàn),這也是對(duì)自己的一次挑戰(zhàn)!當(dāng)然此項(xiàng)畢業(yè)設(shè)計(jì)還涉及web 知識(shí),數(shù)據(jù)庫(kù)知識(shí)等。并且用現(xiàn)在比較流行的技術(shù)來(lái)做畢業(yè)設(shè)計(jì),也是選擇了一個(gè)明朗的方向。4第二章 系統(tǒng)主要技術(shù)簡(jiǎn)介2.1 Python 簡(jiǎn)介Python 和 Java 一樣都屬于面向?qū)ο蟮恼Z(yǔ)言,不同的是 Python 是一種直譯式計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,也是功能十分強(qiáng)大的多平臺(tái)語(yǔ)言,具有近二十年的發(fā)展歷史,擁有成熟性和穩(wěn)定性。Python 包含了一系列功能完善并且容易理解的標(biāo)準(zhǔn)庫(kù),快速輕松的完成比較多見(jiàn)的任務(wù)。Python 語(yǔ)法具有簡(jiǎn)捷和清晰的特點(diǎn),與其它計(jì)算機(jī)編程語(yǔ)言
14、不同的是,它采用縮進(jìn)區(qū)分語(yǔ)句塊。Python 支持采用命令的編程方式、面向?qū)ο缶幊獭⒚嫦蚝瘮?shù)式編程、面向切面編程、泛型編程等多種程序設(shè)計(jì)方式。和很多動(dòng)態(tài)語(yǔ)言如Scheme、Ruby、Perl、Tcl 等一樣,Python 同樣擁有垃圾回收的功能,可以自動(dòng)管理系統(tǒng)的內(nèi)存使用。它經(jīng)常被用作腳本語(yǔ)言來(lái)處理后臺(tái)任務(wù)和 Web 編程,然而它也能非常完美的完成多種高階任務(wù)。Python 虛擬機(jī)基本上可以在所有的操作系統(tǒng)中運(yùn)行。使用一些工具諸如 py2exe、PyPy、PyInstaller 可以將 Python 源代碼轉(zhuǎn)換成可以不需要 Python 解釋器就可以執(zhí)行的程序。Python 特點(diǎn):1. 簡(jiǎn)單易
15、學(xué):Python 上手比較快,因?yàn)?Python 簡(jiǎn)單并且豐富的說(shuō)明文檔。2. 運(yùn)行速度快:Python 的底層語(yǔ)言是用 C 語(yǔ)言,Python 中很多標(biāo)準(zhǔn)庫(kù)還有第三方庫(kù)也都是運(yùn)用 C 語(yǔ)言 寫的,運(yùn)行速度非常迅速。3. 開(kāi)源性:Python 是眾多的開(kāi)放源代碼之一。使用 Python 的程序員可以隨意的復(fù)制、閱讀源代碼。4. 高層語(yǔ)言:運(yùn)用 Python 語(yǔ)言編寫程序時(shí)不需要考慮一些例如如何管理程序使用內(nèi)存一類的底層細(xì)節(jié)。5. 可移植性:由于 Python 開(kāi)源的特點(diǎn),Python 可以被移植到許多平臺(tái)上(經(jīng)過(guò)代碼的修改使它能在不同平臺(tái)上工作)。例如 pc 端的系統(tǒng) Linux、Window
16、s 等、還有移動(dòng)端的 Symbian 以及 Google 基于 linux 開(kāi)發(fā)的 android 平臺(tái)。6. 解釋性:用 C 語(yǔ)言或 C+寫的程序可以從源文件(C 或 C+語(yǔ)言)轉(zhuǎn)換成一個(gè)當(dāng)前計(jì)算機(jī)所使用的語(yǔ)言(即 0 和 1)。通過(guò)這個(gè)步驟編譯器和不同的標(biāo)記、選項(xiàng)來(lái)完成任務(wù)。5使用計(jì)算機(jī)內(nèi)部系統(tǒng)時(shí),Python 解釋轉(zhuǎn)換源代碼轉(zhuǎn)換成稱為字節(jié)代碼的中間代碼,然后將其轉(zhuǎn)換成由當(dāng)前計(jì)算機(jī)使用,并運(yùn)行該代碼的機(jī)器語(yǔ)言。這一過(guò)程使得它更容易使用 Python 。同時(shí) Python 程序變得更容易移植。7. 面向?qū)ο螅篜ython 不僅支持面向過(guò)程的編程也支持面向?qū)ο蟮木幊?。在這個(gè)過(guò)程中取向的語(yǔ)言中,
17、程序由一個(gè)過(guò)程或只是一個(gè)可重復(fù)使用的代碼功能建立起來(lái)。8. 可擴(kuò)展性:如果你想有一個(gè)關(guān)鍵的代碼運(yùn)行得更快或者希望某些代碼不開(kāi)放,你可以使用 C 或 C +寫一些程序功能,然后調(diào)用他們的 Python 程序。9. 可以嵌入性:開(kāi)發(fā)者可以嵌入 Python 代碼到 C / C +程序,它提供了腳本功能的系統(tǒng)用戶使用權(quán)限。10. 豐富的庫(kù):Python 標(biāo)準(zhǔn)庫(kù)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、 文檔生成、單元測(cè)試等等。只要安裝了 Python,所有這些功能都是可用的。這被稱作 Python 的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以 外,還有許多其他高質(zhì)量的庫(kù),如 wxPython、Twist
18、ed 和 Python 圖像庫(kù)等等。 11. 規(guī)范的代碼:Python 使用 tab 鍵來(lái)分割語(yǔ)句使得代碼具有良好可讀性。并且 Python 語(yǔ)言寫的程序代碼不需要編譯成二進(jìn)制代碼。2.2 SQLite 簡(jiǎn)介SQLite,是一個(gè)輕型的數(shù)據(jù)庫(kù),遵守 ACID 的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的 C 庫(kù)中。它是 D.RichardHipp 建立的公有領(lǐng)域項(xiàng)目。不像常見(jiàn)的客戶-服務(wù)器范例,SQLite 引擎不是建立程序來(lái)和引擎通信的獨(dú)立進(jìn)程,而是一個(gè)主要組成部分來(lái)連接到程序。所以主要的通信協(xié)議直接調(diào)用編程語(yǔ)言內(nèi)的 API。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫(kù)(定義、
19、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它的簡(jiǎn)單的設(shè)計(jì)是通過(guò)在開(kāi)始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。特點(diǎn):1. 支持?jǐn)?shù)據(jù)庫(kù)事務(wù)2. 無(wú)需配置:不安裝和管理配置也能使用3. 信息被存儲(chǔ)在單個(gè)磁盤文件中,而且整個(gè)數(shù)據(jù)是存儲(chǔ)在完整的數(shù)據(jù)庫(kù)中。64. 數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由共享。5. 數(shù)據(jù)庫(kù)大小最多支持到 2TB 大小。6. 該數(shù)據(jù)庫(kù)包含 130 萬(wàn)行 C 代碼大約 4.43M。7. 相對(duì)于目前流行的數(shù)據(jù)庫(kù)做一般的數(shù)據(jù)庫(kù) curd 操作要快。8. 數(shù)據(jù)庫(kù)的操作十分簡(jiǎn)單,API 簡(jiǎn)單易懂。9. 源代碼的注解十分詳細(xì), 測(cè)試覆蓋率達(dá)到 90%以上。10. 獨(dú)立性:
20、 無(wú)需依靠其他依賴就可使用。11. 代碼開(kāi)源,用戶可以將源代碼用到任何場(chǎng)所。12. 支持多種語(yǔ)言開(kāi)發(fā)程序,例如 C 語(yǔ)言, C+, Java, Python 等主流語(yǔ)言。2.3 eclipse 簡(jiǎn)介Eclipse 是有 IBM 開(kāi)發(fā)的著名的跨多平臺(tái)的自由集成開(kāi)發(fā)環(huán)境軟件(IDE)。最初軟件開(kāi)發(fā)用做 Java 語(yǔ)言開(kāi)發(fā),現(xiàn)在也可以通過(guò)添加插件使其成為其他計(jì)算機(jī)語(yǔ)言的開(kāi)發(fā)工具例如 C+和 Python。Eclipse 的插件機(jī)制的建筑風(fēng)格是輕量級(jí)的軟件組件。在客戶機(jī)平臺(tái)上, Eclipse 使用插件添加所有的附加功能,如 Java 之外的其他編程語(yǔ)言的支持。該插件已經(jīng)被分離,支持 C / C +
21、(CDT)、數(shù)據(jù)庫(kù)開(kāi)發(fā)等多種用途和語(yǔ)言開(kāi)發(fā)。插件架構(gòu)可以支持任何延伸到現(xiàn)有的開(kāi)發(fā)環(huán)境,例如配置管理,這并不限定于支持各種編程語(yǔ)言。一切都是插件是 Eclipse 的設(shè)計(jì)思路。 Eclipse 的核心并不大,除了 java 開(kāi)發(fā),其它所有功能,都把插件添加到 Eclipse 的核心中。 Eclipse 的基本核心包括:圖形 API (SWT / JFace 的) , Java 開(kāi)發(fā)環(huán)境插件( JDT) ,插件開(kāi)發(fā)環(huán)境( PDE )等。7第三章 系統(tǒng)需求與分析3.1 系統(tǒng)功能需求.1 用戶認(rèn)證用戶認(rèn)證用戶認(rèn)證模塊針對(duì)所有用戶,用戶連接程序進(jìn)行身份認(rèn)證,通過(guò)認(rèn)證后,程序知道用戶身份,
22、就可以提供針對(duì)性的體驗(yàn)。1. 密碼的安全性,運(yùn)用計(jì)算密碼散列值來(lái)實(shí)現(xiàn)對(duì)密碼的保護(hù)。2. 使用藍(lán)本實(shí)現(xiàn)不同界面的跳轉(zhuǎn)功能。3. 用戶登錄后,認(rèn)證狀態(tài)被 Flask-Login 記錄下來(lái),管理用戶認(rèn)證系統(tǒng)中的認(rèn)證狀態(tài)。4. 新用戶想成為成為其中的一員,必須在博客系統(tǒng)中注冊(cè),根據(jù)博客系統(tǒng)的需求,用戶分為 3 個(gè)角色:用戶、言論管理員、管理員。1) 用戶的主要功能用戶的用例圖如圖 3-1 所示。用戶博博客客系系統(tǒng)統(tǒng)注冊(cè)信息管理博客文章管理個(gè)人資料管理關(guān)注博主圖 3-1 博客系統(tǒng)用戶用例圖 賬號(hào)操作:注冊(cè)賬號(hào),設(shè)置認(rèn)證郵箱和密碼,并且具有修改自己郵箱賬號(hào)和密碼。 修改個(gè)人資料:編輯作者的姓名,位置等信息
23、。8 發(fā)布博文:用戶可以隨性所欲的發(fā)表自己的想法和理念。 修改博文:用戶可以修改自己發(fā)布的文章。 關(guān)注博主:關(guān)注其他用戶,在指定一欄中顯示關(guān)注者的文章。 查看個(gè)人資料:點(diǎn)擊用戶,鏈接到作者的用戶資料界面。 2) 言論管理員的功能言論管理員的用例圖如圖 3-2 所示。言論管理員博博客客系系統(tǒng)統(tǒng)注冊(cè)信息管理博客文章管理個(gè)人資料管理關(guān)注博主言論管理圖 3-2 博客系統(tǒng)言論管理員用例圖 言論管理員擁有普通用戶的權(quán)限,并且具有言論管理的權(quán)限。如果有用戶使用了不正當(dāng)?shù)难哉?,管理員可以將評(píng)論給屏蔽掉。9 3) 管理員的功能管理員的用例圖如圖 3-3 所示。管理員博博客客系系統(tǒng)統(tǒng)注冊(cè)信息管理博客文章管理個(gè)人資
24、料管理關(guān)注博主言論管理用戶管理圖 3-3 博客系統(tǒng)管理員用例圖管理員擁有言論管理員的權(quán)限,還有修改所有用戶的用戶組和用戶資料。5. 用戶可以管理自己賬號(hào),修改個(gè)人資料和郵箱地址和密碼。.2 用戶角色用戶角色 程序?qū)τ诮巧x予了不同的權(quán)限。所有用戶的權(quán)限總共一下幾種操作:關(guān)注用戶,在他人的博文中發(fā)表評(píng)論,編寫博文,管理別人發(fā)表的評(píng)論,管理權(quán)限。角色分為 4 種:1. 匿名游客在系統(tǒng)中只有閱讀權(quán)限。2. 用戶編輯并發(fā)表文章、發(fā)表自己的言論、關(guān)注他人、查看他人信息的權(quán)限。3. 言論管理員 審查那些不當(dāng)?shù)难哉摰臋?quán)限。4. 管理員 擁有所有的權(quán)限,并且包括修改所有注冊(cè)用戶的角色的權(quán)限。3
25、. 用戶資料用戶資料網(wǎng)絡(luò)社交中往往會(huì)有提供給用戶的資料頁(yè)面,只要用來(lái)了解到作者的個(gè)人信息10和興趣愛(ài)好。用戶可以把自己資料的 URL 分享給其他人,這樣別人能更方便的了解作者。用戶資料中有用戶姓名、用戶所在位置、關(guān)于用戶的信息、加入博客系統(tǒng)時(shí)間等信息。用戶可以編輯自己的資料,但只是編輯一些基本的資料。管理員則在編輯用戶時(shí)會(huì)有編輯用戶角色的權(quán)限,修改用戶的權(quán)限資料。在編輯上要?jiǎng)?chuàng)建兩個(gè)不一樣的表單。用戶的頭像使用的是其他網(wǎng)站上的圖片。使用 Gravatar 提供的頭像。用戶只需在網(wǎng)站上綁定自己的郵箱和頭像圖片,就能使得在博客系統(tǒng)中顯示同樣的頭像。.4 博文管理博文管
26、理博客系統(tǒng)中允許用戶閱讀文章,撰寫博文。用戶不僅可以讀取關(guān)注的作者博文,還要能自己 發(fā)表博文。如果對(duì)博文不滿意的地方還可以進(jìn)行修改。對(duì)所看的博文有不同意見(jiàn)或者贊同的話也可以評(píng)論進(jìn)行交流。管理員可以直接修改博文,并且可以屏蔽掉不當(dāng)?shù)难哉?。編寫博文時(shí),會(huì)用到一些標(biāo)題、引用等特殊格式,所以在編輯博文的時(shí)候用到Markdown 的語(yǔ)法,簡(jiǎn)單方便的將文章進(jìn)行標(biāo)準(zhǔn)化。113.2 開(kāi)發(fā)環(huán)境需求1、 硬件要求 既為終端又為服務(wù)器的一臺(tái)計(jì)算機(jī)pc 機(jī)屬性:CPU:i5 2.0G Hz內(nèi)存 4G 硬盤:1T2、 軟件要求Windows7 操作系統(tǒng)SQLite 數(shù)據(jù)庫(kù)Eclipse Mars.2 Release 開(kāi)
27、發(fā)工具Python2.7 庫(kù)Chrome 瀏覽器12第四章 系統(tǒng)設(shè)計(jì)4.1 系統(tǒng)功能設(shè)計(jì)1、認(rèn)證管理,如圖 4-1 所示。用戶認(rèn)證用戶言論管理員管理員注冊(cè)郵箱、密碼修改注冊(cè)郵箱、密碼注冊(cè)郵箱、密碼修改注冊(cè)郵箱、密碼注冊(cè)郵箱、密碼修改所有注冊(cè)郵箱、密碼圖 4-1 用戶認(rèn)證圖游客訪問(wèn)博客系統(tǒng)時(shí),只能查看一些博文和博主的簡(jiǎn)單資料,如果要進(jìn)行深入了解還需注冊(cè)賬戶。在注冊(cè)賬戶的時(shí)候,要求用戶提交常用電子郵箱賬號(hào)和本系統(tǒng)中的用戶名及密碼。在注冊(cè)時(shí)對(duì)郵箱和用戶名進(jìn)行正則校驗(yàn),不符合條件的無(wú)法注冊(cè)。注冊(cè)成功后,系統(tǒng)通過(guò) SMTP 郵箱服務(wù)器發(fā)送一封確認(rèn)郵件,收到郵件后單擊URL 鏈接后才可以登錄博客系統(tǒng)?;蛘?/p>
28、管理員可以在資料中,修改用戶的確認(rèn)狀態(tài)。用戶還可修改自己的郵箱地址和博客系統(tǒng)密碼。修改郵箱時(shí)也需進(jìn)行郵件確認(rèn)。132、個(gè)人資料管理,如圖 4-2 所示。個(gè)人資料管理用戶言論管理員管理員查看所有用戶的個(gè)人資料修改自己的個(gè)人資料查看所有用戶的個(gè)人資料修改自己的個(gè)人資料查看所有用戶的個(gè)人資料修改所有人的個(gè)人資料和角色等圖 4-2 個(gè)人資料管理模塊圖用戶在注冊(cè)賬戶后會(huì)提交一些個(gè)人資料,這些資料用于博友之間的互相了解。用戶登錄博客系統(tǒng)后可以對(duì)自己的個(gè)人資料進(jìn)行管理。點(diǎn)擊主頁(yè)面的個(gè)人資料鏈接,首先顯示的是用戶自己的資料。單擊編輯資料按鈕,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)加載到表單中。編輯用戶資料分為兩種情況。顯而易見(jiàn),第
29、一種情況用戶進(jìn)入一個(gè)頁(yè)面編輯自己的資料。還有一種是管理員的操作,單擊編輯資料可以加載 User 模型中的字段,例如用戶角色。這兩個(gè)編輯功能有本質(zhì)上的區(qū)別,所以在設(shè)計(jì)的時(shí)候要?jiǎng)?chuàng)建兩種不一樣的表單來(lái)進(jìn)行資料修改。用戶級(jí)別的編輯資料只加載用戶的姓名、位置、相關(guān)信息 3 個(gè)字段,提交不需要對(duì)信息進(jìn)行校驗(yàn)。而管理員的編輯資料就顯得復(fù)雜一些,管理員還需編輯用戶的電子郵件、用戶名、確認(rèn)狀態(tài)和角色。郵箱和用戶名在提交時(shí)要進(jìn)行正則匹配,如果不符合要求,則不通過(guò)驗(yàn)證。143、博客管理,如圖 4-3 所示。博客文章管理用戶言論管理員管理員查看所有文章編寫自己的博客文章修改自己的博客文章查看所有文章編寫自己的博客文章
30、修改自己的博客文章查看所有文章編寫自己的博客文章修改所有作者的博客文章圖 4-3 博客文章管理圖用戶在使用博客系統(tǒng)時(shí),只要就是享受查看博客和編寫博客的樂(lè)趣。所以博客管理是比較重要的模塊。博文擁有編號(hào)、正文、時(shí)間戳和作者編號(hào)這幾個(gè)字段。程序首頁(yè)就有編寫博文的表單。如果角色擁有寫文章的權(quán)限,則會(huì)顯示編輯博客文章的表單。如果是游客訪問(wèn)的話,寫文章的表單不會(huì)顯示出來(lái)。博客文章主頁(yè)顯示的每一條博文都有博主的用戶名、頭像、發(fā)布時(shí)間和博客文章??梢渣c(diǎn)擊上面的超鏈接,訪問(wèn)其他頁(yè)面。如果發(fā)布的是短消息或者只是更新近期的狀態(tài),純文本格式的就已經(jīng)足夠了。但是如果發(fā)布博客文章的話就在格式上被限制住了。所以引入 Mar
31、kdown 的語(yǔ)法來(lái)給文章添加一些格式。運(yùn)用 pagedown 模塊,調(diào)用 JavaScript 實(shí)現(xiàn) Markdown 的轉(zhuǎn)換,能夠在表單的下方進(jìn)行預(yù)覽。提交時(shí),只提交表單中的 Markdown 源文本。154、關(guān)注與評(píng)論,如圖 4-4 所示。關(guān)注功能與評(píng)論博客文章功能用戶言論管理員管理員關(guān)注自己欣賞的作者評(píng)論博客文章關(guān)注自己欣賞的作者評(píng)論博客文章評(píng)論博客文章關(guān)注自己欣賞的作者評(píng)論博客文章評(píng)論博客文章圖 4-4 關(guān)注作者與評(píng)論功能圖在程序中有一層關(guān)系叫做關(guān)注者與被關(guān)注者。這個(gè)功能用來(lái)在主頁(yè)中一個(gè)頁(yè)簽中顯示所有關(guān)注者的文章包括自己的。數(shù)據(jù)庫(kù)中運(yùn)用 follows 表來(lái)記錄關(guān)注問(wèn)題。所以在顯示已
32、關(guān)注者的頁(yè)簽時(shí),使用表的聯(lián)查來(lái)獲取所有關(guān)聯(lián)的博客文章。如果想取消用戶之間的聯(lián)系,可以單擊取消關(guān)注按鈕,通過(guò)數(shù)據(jù)庫(kù)中記錄的刪除來(lái)實(shí)現(xiàn)。個(gè)人資料中還可點(diǎn)擊粉絲來(lái)查看關(guān)注自己的用戶信息,關(guān)注按鈕則是跳轉(zhuǎn)到用戶自己關(guān)注的作者的信息界面。用戶具有對(duì)博客系統(tǒng)中文章評(píng)論的權(quán)限,但是擁有評(píng)論的權(quán)限也必須履行言論正當(dāng)?shù)牧x務(wù)。當(dāng)用戶使用不恰當(dāng)?shù)难孕袝r(shí),言論管理員可以將改評(píng)論置為不可見(jiàn),理論上不從數(shù)據(jù)庫(kù)中刪除。超級(jí)管理員不僅可以編輯已發(fā)布的博客文章,還可以管理用戶的評(píng)論,也是將評(píng)論置為不可見(jiàn)。164.2 數(shù)據(jù)庫(kù)設(shè)計(jì)在博客系統(tǒng)中涉及到很多用戶之間的交互,良好的邊間關(guān)系顯得尤為重要。系統(tǒng)中總共 6 個(gè)表,分別為版本表
33、version、評(píng)論表 comments、關(guān)注表 follows、博客文章表 posts、角色表 roles、用戶表 users。版本表在本系統(tǒng)中作用不大,只是為了以后的功能擴(kuò)展做鋪墊。系統(tǒng)中數(shù)據(jù)庫(kù)表關(guān)系如圖 4-5 所示。usersP PK Ki id d username role_id email confirmed about_me last_seen location member_since name avatar_hashrolesP PK Ki id d name default permissionspostsP PK Ki id d body timestamp autho
34、r_id body_htmlfollowsP PK Kf fo ol ll lo ow we er r_ _i id dP PK Kf fo ol ll lo ow we ed d_ _i id d timestampcommentsP PK Ki id d body body_html timestamp disable author_id post_id圖 4-5 表間關(guān)系圖1、角色表 roles 中,存儲(chǔ)的是用戶的 3 種角色。各個(gè)字段如下圖表 4-1 所示。字段名類型長(zhǎng)度默認(rèn)值字段說(shuō)明idinteger0PK 主鍵namevarchar64用戶名 UNIQUEdefaultboolea
35、n0默認(rèn)為用戶permissionsinteger0用戶權(quán)限值表 4-1 角色表17每一個(gè)用戶注冊(cè),id 自動(dòng)加 1,用戶名和數(shù)據(jù)庫(kù)中的用戶名進(jìn)行比較,沒(méi)有相同的則可以申請(qǐng)。注冊(cè)賬號(hào)時(shí),博客系統(tǒng)默認(rèn)使用者為用戶,所以只有普通用戶的default 字段為 true,普通用戶、言論管理員、管理員的權(quán)限值分別為7、15、255。2、用戶表 users 如圖 4-2。字段名類型長(zhǎng)度默認(rèn)值字段說(shuō)明idinteger用戶編號(hào) PKusernamevarchar64用戶名role_idinteger用戶角色編號(hào)emailvarchar64用戶郵箱地址password_hashvarchar128密碼哈希散列
36、值confiremedboolean郵箱是否確認(rèn)about_metext關(guān)于作者資料last_seendatetime上次登錄時(shí)間locationvarchar64位置member_sincedatetime加入博客系統(tǒng)的時(shí)間戳namevarchar64用戶姓名avatar_hashvarchar32郵箱散列值表 4-2 用戶表用戶表中用戶 id 作為主鍵,用戶名不可重復(fù)。role_id 為 roles 表中的 id,作為此表中的外鍵,用來(lái)確定用戶屬于那種角色。郵箱地址、加入系統(tǒng)的時(shí)間都是在注冊(cè)的時(shí)候就填寫的。密碼的哈希散列值則是通過(guò)輸入的密碼進(jìn)行轉(zhuǎn)化得來(lái),郵箱散列值也是如此。3、關(guān)注表 fo
37、llows 如表 4-3 所示。字段名類型長(zhǎng)度默認(rèn)值字段說(shuō)明follower_idinteger關(guān)注者 idfollowed_idinterger被關(guān)注者 idtimestampdatetime時(shí)間戳表 4-3 關(guān)注表關(guān)注表中關(guān)注者 id 和被關(guān)注者的 id 聯(lián)合起來(lái)作為主鍵,這樣防止關(guān)系的重復(fù)。用戶在關(guān)注其他用戶的時(shí)候,單擊關(guān)注時(shí)會(huì)產(chǎn)生一個(gè)時(shí)間戳一起寫到數(shù)據(jù)庫(kù)中。4、博客文章表 posts 如表 4-4 所示。字段名類型長(zhǎng)度默認(rèn)值字段說(shuō)明idinteger博文編號(hào)bodytext博文主體18timestampdatetime時(shí)間戳author_idinteger作者 idbody_htmlt
38、extMarkdown 語(yǔ)法的博文表 4-4 博客文章表博客文章表中,body 字段為用戶發(fā)表博文的原始字段,經(jīng)過(guò) Markdown 的語(yǔ)法處理之后轉(zhuǎn)化成 html 語(yǔ)法存儲(chǔ)在 body_html 字段中。同樣在編輯的時(shí)候,會(huì)產(chǎn)生一個(gè)時(shí)間戳和作者 id 來(lái)標(biāo)示博客文章。5、評(píng)論表 comments 如 4-5 所示。字段名類型長(zhǎng)度默認(rèn)值字段說(shuō)明IdInteger評(píng)論編號(hào)BodyText評(píng)論主體Body_htmlText評(píng)論主體 htmlTimestampDatetime時(shí)間戳DisableBoolean是否顯示Author_idInteger評(píng)論人編號(hào)Post_idinteger博文編號(hào)表 4
39、-5 評(píng)論表評(píng)論時(shí)和發(fā)布博客文章一樣,評(píng)論的主體會(huì)經(jīng)過(guò) Markdown 語(yǔ)法進(jìn)行翻譯,存儲(chǔ)到 body_html 中去。在評(píng)論中,支持的語(yǔ)法相對(duì)較少,防止和博文一樣復(fù)雜化。評(píng)論會(huì)和評(píng)論者的編號(hào)和所評(píng)論的博客文章編號(hào)進(jìn)行關(guān)聯(lián)。19第五章 系統(tǒng)功能模塊實(shí)現(xiàn)系統(tǒng)功能模塊的實(shí)現(xiàn)是對(duì)系統(tǒng)設(shè)計(jì)基礎(chǔ)上的進(jìn)行模塊的編碼,為源代碼提供說(shuō)明。所有 Flask 框架的程序都要?jiǎng)?chuàng)建一個(gè)程序?qū)嵗?。Web 服務(wù)器使用 Web 服務(wù)器網(wǎng)關(guān)接口協(xié)議,把來(lái)自客戶端的請(qǐng)求傳送給程序?qū)嵗?。程序?qū)嵗笾烂總€(gè) URL 對(duì)應(yīng)的代碼,處理函數(shù)與 URL 的關(guān)系代碼成為路由。程序?qū)嵗\(yùn)用 run 方法來(lái)啟動(dòng)Flask 集成開(kāi)發(fā)的服務(wù)器
40、。如果使用調(diào)試模式時(shí),將 app.run()函數(shù)中的參數(shù)設(shè)置為 true。數(shù)據(jù)庫(kù)連接使用 Flask-SQLAlchemy 庫(kù)。SQLite 數(shù)據(jù)庫(kù)不需要使用服務(wù)器,所以不用指定 hostname、username、和 password。程序使用的數(shù)據(jù)庫(kù) URL 必須保存在 Flask 配置對(duì)象的 SQLALCHEMY_DATABASE_URI 中。初始化并配置 SQLite 數(shù)據(jù)庫(kù)代碼如下。from flask.ext.sqlalchemy inport SQLAlchemybasedir = os.path.abspath(os.path.dirname(_file_)app = Flas
41、k(_name_)app.configSQLALCHEMY_DATABASE_URI = sqlite:/+os.path.join(basedir,data-dev.sqlite)app.configSQLALCHEMY_COMMIT_ON_TERDOWN = truedb = SQLAlchemy(app)5.1 注冊(cè)及用戶認(rèn)證.1 用戶注冊(cè)用戶注冊(cè)在博客系統(tǒng)中,用戶只有在登錄的情況下才能評(píng)論博客、關(guān)注作者,所以使用者必須先注冊(cè)賬號(hào)。在注冊(cè)時(shí)的流程圖 5-1 如下。20開(kāi)始填寫郵箱用戶名填寫是否符合標(biāo)準(zhǔn)、郵箱用戶名是否未被占用N設(shè)置密碼Y校驗(yàn)兩次密碼是否輸入一致YN跳轉(zhuǎn)到登
42、陸界面結(jié)束圖 5-1 用戶注冊(cè)流程圖注冊(cè)賬號(hào)主要代碼如下。class RegistrationForm(Form): email = StringField(u郵箱賬號(hào) , validators=Required(), Length(1, 64), Email() username = StringField(u用戶名, validators= Required(), Length(1, 64), Regexp(A-Za-zA-Za-z0-9_.*$, 0,Usernames must have only letters,numbers, dots or underscores) passwo
43、rd = PasswordField(u密碼, validators= Required(), EqualTo(password2, message=u密碼必須一致! ) password2 = PasswordField(u確認(rèn)密碼 , validators=Required() submit = SubmitField(u注冊(cè))主要對(duì)用戶名和郵箱進(jìn)行了正規(guī)化的校驗(yàn),并且確認(rèn)用戶注冊(cè)時(shí)用戶名和郵箱賬號(hào)不能重復(fù)。.2 用戶認(rèn)證用戶認(rèn)證用戶在首次登錄時(shí),必須你打開(kāi)確認(rèn)郵件,才可按不同角色跳轉(zhuǎn)到不同的界面中。流程如下圖 5-2 所示。開(kāi)始用戶提交注冊(cè)信息后登錄,發(fā)送確認(rèn)郵件確認(rèn)
44、是否確認(rèn)N跳轉(zhuǎn)到主頁(yè)面Y是否為用戶是否為言論管理員N跳轉(zhuǎn)到用戶主頁(yè)面Y跳轉(zhuǎn)到言論管理員主頁(yè)面Y跳轉(zhuǎn)到管理員界面N結(jié)束圖 5-2 用戶登錄流程圖對(duì)于游客,博客系統(tǒng)只顯示所有的文章,發(fā)表評(píng)論和發(fā)表博客文章的表單將隱藏起來(lái)。所以在注冊(cè)后,用戶登錄會(huì)跳轉(zhuǎn)到不同的界面,普通用戶可以發(fā)表博客文章和評(píng)論,并且只可以修改自己的文章。而管理員則可以修改任何人的文章,當(dāng)然也可以發(fā)表自己的博客文章和評(píng)論。5.2 用戶資料用戶在登錄后可以修改自己的用戶資料。包括修改自己的郵箱地址、密碼、姓名、位置、以及個(gè)人簡(jiǎn)介。其流程如下圖 5-3 所示。22開(kāi)始修改個(gè)人信息當(dāng)前角色是否未管理員修改郵箱、密碼等基本信息Y修改基本信息
45、以及用戶名、角色類型N結(jié)束圖 5-3 修改個(gè)人信息流程圖系統(tǒng)使用者在點(diǎn)擊編輯資料時(shí),根據(jù)上述的流程圖中,首先判斷使用者的身份。若使用者為用戶時(shí),界面如圖 5-4。圖 5-4 用戶編輯個(gè)人資料圖23而當(dāng)使用者為管理員時(shí),界面如圖 5-5。圖 5-5 管理員編輯個(gè)人資料圖管理人員可以編輯用戶的基本信息,還可以編輯用戶自己不可編輯的字段,比如:用戶名、角色、是否確認(rèn)這三項(xiàng),并且在修改郵箱的時(shí)候也不需要對(duì)郵箱發(fā)送確認(rèn)郵件了。5.3 博客文章此模塊的用戶是所有登陸的用戶、言論管理員、管理員,游客不能發(fā)表任何文章。撰寫博客文章時(shí),可以使用 Markdown 的語(yǔ)法來(lái)將文章格式化。博客系統(tǒng)的首頁(yè)要顯示一個(gè)表
46、單,以便于用戶撰寫博客文章。表單很簡(jiǎn)單,只有一個(gè)文本輸入框,用戶輸入博客文章。在輸入的同時(shí),會(huì)運(yùn)行 JavaScript 及時(shí)將博客文章轉(zhuǎn)化成 html語(yǔ)言,顯示在預(yù)覽框中。24由于博客系統(tǒng)的用戶不會(huì)只限制于幾個(gè),所以在展示博客文章的時(shí)候要用到分頁(yè)。使用分頁(yè)時(shí)要使用很多的數(shù)據(jù)。博客系統(tǒng)中使用 ForgeryPy 庫(kù)來(lái)進(jìn)行自動(dòng)化生成數(shù)據(jù)。將數(shù)據(jù)添加到 User 模型和 Post 模型中,生成虛擬數(shù)據(jù)。核心代碼如下。def generate_fake(count=100): from sqlalchemy.exc import IntegrityError from random import s
47、eed import forgery_py seed() for i in range(count): u = User(email=forgery_ernet.email_address(), username=forgery_ernet.user_name(True), password=forgery_py.lorem_ipsum.word(), confirmed=True, name=forgery_.full_name(), location=forgery_py.address.city(), about_me=forgery_py.lore
48、m_ipsum.sentence(), member_since=forgery_py.date.date(True) db.session.add(u) try: mit() except IntegrityError: db.session.rollback()上述為 User 模型數(shù)據(jù)的自動(dòng)化生成,Post 模型的數(shù)據(jù)也是這個(gè)原理。當(dāng)博客文章滿足一定條件后,頁(yè)面的渲染只會(huì)顯示有限數(shù)量的文章,如果要想訪問(wèn)其他頁(yè)數(shù)的博客文章需要在瀏覽器地址欄中加上 URL 進(jìn)行查詢。在 Flask-SQLAlchemy 中 paginate()方法中定義每頁(yè)顯示的數(shù)量,默認(rèn)值為 20 條記錄。分頁(yè)導(dǎo)航是以
49、Jinja2 宏來(lái)實(shí)現(xiàn),這個(gè)宏以 Bootstarp 的分頁(yè)元素定義。如果當(dāng)前頁(yè)數(shù)為 1,“上一頁(yè)”鏈接則置為不可用。同樣,當(dāng)當(dāng)前頁(yè)為最后一頁(yè),“下一頁(yè)”按鈕也將會(huì)置為不可用。分頁(yè)對(duì)象迭代器返回的所有頁(yè)面鏈接,被渲染成有頁(yè)數(shù)的鏈接,顯示時(shí)使用 activeCSS 類高亮顯示。每一篇博客文章應(yīng)該有一頁(yè)專頁(yè),引用唯一的 URL,便于向社交網(wǎng)絡(luò)中分享自己的文章。只要代碼如下:main.route(/post/, methods=GET, POST)def post(id): post = Post.query.get_or_404(id) form = CommentForm()只允許博客文章的作者
50、進(jìn)行編輯文章時(shí),要用到視圖函數(shù)。但是管理員可以修改任何一個(gè)人的博客文章。如果普通用戶嘗試編輯其他用戶的文章時(shí),視圖函數(shù)會(huì)25返回錯(cuò)誤代碼 403。實(shí)現(xiàn)方式:def edit(id): post = Post.query.get_or_404(id) if current_user != post.author and not current_user.can(Permission.ADMINISTER): abort(403) form = PostForm()為了完善功能,在每一條博客文章的右下角有 3 個(gè)按鈕。分別鏈接到編輯博客文章界面、文章的 URL、評(píng)論界面。為了區(qū)別和普通用戶的編輯,
51、在編輯按鈕上的樣式使用了不同的樣式來(lái)區(qū)分角色。5.4 關(guān)注作者在數(shù)據(jù)庫(kù)中使用表來(lái)創(chuàng)建用戶之間的關(guān)系。數(shù)據(jù)庫(kù)關(guān)注表中總共 3 個(gè)字段,關(guān)注者 id、被關(guān)注者 id、關(guān)注時(shí)間。當(dāng)關(guān)注者 id 和被關(guān)注者 id 相同時(shí),這層關(guān)系叫做自引用關(guān)系。關(guān)注者 id、被關(guān)注者 id 都是表的外鍵,與用戶表的數(shù)據(jù)對(duì)應(yīng)。關(guān)注者和被關(guān)注者又形成了關(guān)注表的主鍵。在點(diǎn)擊作者用戶名后,頁(yè)面跳轉(zhuǎn)到用戶資料界面。點(diǎn)擊關(guān)注按鈕后,按鈕變成取消關(guān)注,同時(shí)改作者的資料中顯示粉絲人數(shù)少了一名。如下圖 5-6 所示。圖 5-6 個(gè)人資料界面圖程序中使用 follow()方法將實(shí)例創(chuàng)建,插入到 follow 表中,從而把關(guān)注者和被關(guān)注者
52、關(guān)聯(lián)起來(lái),連接在一起的兩名用戶被傳到 follow 類的構(gòu)造器中,創(chuàng)建一26個(gè) Follow 的新實(shí)例,并且將實(shí)例對(duì)象添加到數(shù)據(jù)會(huì)話中。在創(chuàng)建的同時(shí),要系統(tǒng)會(huì)生成一個(gè)時(shí)間戳,即當(dāng)前時(shí)間,一起添加到數(shù)據(jù)庫(kù)中。取消關(guān)注時(shí),使用unfollow()方法找到關(guān)注者和被關(guān)注者的連接關(guān)系,刪除這個(gè) Follow 對(duì)象就能實(shí)現(xiàn)。在關(guān)注成功后,目的是把所有關(guān)注的作者的文章集中到一個(gè)界面中來(lái)顯示。這時(shí)候使用數(shù)據(jù)庫(kù)的聯(lián)查來(lái)實(shí)現(xiàn)。想要顯示所有的關(guān)注作者的文章,第一步先獲取這些用戶信息,然后通過(guò)表的中 id 獲取各個(gè)用戶的文章,通過(guò)文章生成時(shí)的時(shí)間戳來(lái)進(jìn)行排序,單獨(dú)寫到一個(gè)列表中。但是這種操作方式可伸縮性差,隨著數(shù)據(jù)
53、庫(kù)中數(shù)據(jù)的不斷增長(zhǎng),列表工作量也會(huì)增長(zhǎng),無(wú)法保持高效率的執(zhí)行。這時(shí)候需要使用聯(lián)結(jié)操作。當(dāng)查詢的時(shí)候查找滿足條件的記錄組合,再把記錄寫入到一個(gè)臨時(shí)表中,這就是聯(lián)結(jié)查詢所得到的結(jié)果。5.5 評(píng)論管理用戶在登錄博客系統(tǒng)中有發(fā)表評(píng)論的功能,而評(píng)論和博客文章本質(zhì)上沒(méi)有什么區(qū)別。都是使用了 Markdown 的語(yǔ)法。評(píng)論是屬于某一篇博客文章的,所以定義了一個(gè)關(guān)系,從 posts 表與 comments 表形成一對(duì)多的關(guān)系。使用這層關(guān)系,可以獲取到特性一篇文章的所有評(píng)論。在博客系統(tǒng)中,評(píng)論要顯示在對(duì)應(yīng)的單片博客文章中。點(diǎn)擊博客文章界面上的編輯按鈕,界面就跳轉(zhuǎn)到評(píng)論的鏈接,一個(gè)能提交評(píng)論信息的表單也要在此界面
54、中。這個(gè)表單相對(duì)其他表單來(lái)說(shuō),比較簡(jiǎn)單,只有一個(gè)字段和按鈕。評(píng)論按照時(shí)間戳進(jìn)行排序,先評(píng)論的顯示在最前面。評(píng)論也使用了與博客文章相同的技術(shù)來(lái)實(shí)現(xiàn)分頁(yè)效果。評(píng)論的渲染過(guò)程在模板_comments.html 中,類似于_posts.html,使用的 css 樣式卻不同。評(píng)論要顯示在文章的正下方,然后在顯示分頁(yè)導(dǎo)航欄。博客文章頁(yè)面中有顯示文章的評(píng)論數(shù)量,評(píng)論數(shù)量是使用的 SQLAlchemy提供的 count()方法來(lái)進(jìn)行計(jì)數(shù)。管理評(píng)論時(shí),有兩種角色有權(quán)限,分別為言論管理員和管理員。他們用戶的權(quán)限為 permission.moderate_connemts,擁有此權(quán)限可以對(duì)博客系統(tǒng)中的任意一條評(píng)論進(jìn)
55、行管理。管理界面中,在列表顯示全部用戶的評(píng)論記錄,按照發(fā)布的時(shí)間最近開(kāi)始排序。每一篇博客文章右下角都有一個(gè) disabled 按鈕,點(diǎn)擊按鈕,評(píng)論將視27為不可見(jiàn)。但是在視圖中,對(duì)于普通用戶來(lái)說(shuō),不顯示標(biāo)記有問(wèn)題的評(píng)論。對(duì)于言論管理員來(lái)說(shuō),不管是否被標(biāo)記為有問(wèn)題,都要顯示出用戶評(píng)論的內(nèi)容。評(píng)論路由定義如下:main.route(/moderate/enable/)login_requiredpermission_required(Permission.MODERATE_COMMENTS)def moderate_enable(id): comment = Comment.query.get_o
56、r_404(id) comment.disabled = False db.session.add(comment) return redirect(url_for(.moderate, page=request.args.get(page, 1, type=int)main.route(/moderate/disable/)login_requiredpermission_required(Permission.MODERATE_COMMENTS)def moderate_disable(id): comment = Comment.query.get_or_404(id) comment.
57、disabled = True db.session.add(comment) return redirect(url_for(.moderate, page=request.args.get(page, 1, type=int)28第六章 系統(tǒng)測(cè)試6.1 測(cè)試環(huán)境1. 裝有 windows7 系統(tǒng)的 pc 機(jī)。Python 程序理論上可以在多個(gè)平臺(tái)上運(yùn)行,可以在 windows 或者 linux 上都可以運(yùn)行。由于在 windows 系統(tǒng)中開(kāi)發(fā)的,所以直接用同了一個(gè)系統(tǒng)。2. 安裝 Python。如果沒(méi)有安裝 Python 安裝包,就相當(dāng)于沒(méi)有安裝 JDK 運(yùn)行 Java 代碼。安裝Pyth
58、on 后,還要使用 pip 命令安裝一些程序必須要引用的庫(kù),例如 flask 的一系列庫(kù)。3. 瀏覽器 chrome。瀏覽器是 web 應(yīng)用性能檢測(cè)的重要工具。根據(jù)瀏覽器的測(cè)試頁(yè)面的結(jié)果,進(jìn)行針對(duì)性的優(yōu)化。6.2 測(cè)試目的軟件開(kāi)發(fā)的最基本的要求是時(shí)間和質(zhì)量。而軟件測(cè)試是軟件質(zhì)量保證的最重要的手段之一。對(duì)于軟件來(lái)說(shuō),無(wú)論采用什么技術(shù)和方法進(jìn)行開(kāi)發(fā),產(chǎn)品都會(huì)有bug。采用比較全面的技術(shù)測(cè)試可以減少錯(cuò)誤的存在,提高軟件的運(yùn)行時(shí)的穩(wěn)定性。在整個(gè)軟件的生命周期中,每個(gè)階段、每個(gè)時(shí)間都存在軟件測(cè)試活動(dòng),軟件測(cè)試伴隨著軟件開(kāi)發(fā),檢驗(yàn)每個(gè)階段的成果是否符合質(zhì)量要求并且達(dá)到預(yù)期的目的,盡早的發(fā)現(xiàn)并且改正程序中的
59、錯(cuò)誤。 編寫單元測(cè)試的主要目的有兩個(gè),一是能夠確保新添加的代碼按照預(yù)期的方式運(yùn)行。二是每次修改程序后,運(yùn)行單元測(cè)試能保證現(xiàn)有的代碼功能依舊能用。6.3 測(cè)試內(nèi)容1、登陸功能模塊:1)用戶用注冊(cè)過(guò)的郵箱賬號(hào)可密碼進(jìn)行登陸,是否能驗(yàn)證成功,并且跳轉(zhuǎn)到29主頁(yè)面;2)用戶在點(diǎn)擊注冊(cè)賬號(hào)時(shí),填寫資料是否能夠檢查出唯一性;3)注冊(cè)賬號(hào)時(shí),系統(tǒng)是否能夠發(fā)送確認(rèn)郵件到用戶提供的郵箱中;4)登陸成功后,用戶點(diǎn)擊修改郵箱賬號(hào),系統(tǒng)是否會(huì)發(fā)送郵箱到目標(biāo)郵箱;5)登陸成功后,用戶修改密碼是否能成功。 2、博客文章功能管理模塊:1)游客訪問(wèn)時(shí),能否發(fā)表博客文章;2)普通用戶登錄后,能否發(fā)布博客文章;3)普通用戶登錄后
60、,能否使用 Markdown 的語(yǔ)法來(lái)將文章內(nèi)容富文本化;4)普通用戶登錄后,能否將自己已經(jīng)發(fā)布的文章進(jìn)行修改;5)言論管理員登錄后,能否像普通用戶一樣進(jìn)行博客文章的發(fā)布和編輯;6)言論管理員登陸后,能否修改普通用戶所發(fā)布的博客文章;7)管理員登錄后,能否像普通用戶一樣進(jìn)行博客文章的發(fā)布和編輯;8)管理員登錄后,能否編輯所有用戶的博客文章3、個(gè)人資料模塊:1)游客訪問(wèn)時(shí),點(diǎn)擊用戶用戶名的鏈接,界面是否能跳轉(zhuǎn)成功;2)普通用戶登錄后,點(diǎn)擊自己的用戶名,是否能跳轉(zhuǎn)到自己的信息界面,點(diǎn)擊編輯資料后,是否能跳轉(zhuǎn)到編輯個(gè)人資料的界面,提交后,用戶資料是否提交到數(shù)據(jù)庫(kù)中;3)點(diǎn)擊用戶名的鏈接,是否能看到用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版包裝印刷產(chǎn)業(yè)園區(qū)共建合作協(xié)議2篇
- 二零二五年度數(shù)據(jù)中心強(qiáng)電設(shè)備安全評(píng)估合同4篇
- 2025年度酒店餐飲部承包經(jīng)營(yíng)合作協(xié)議4篇
- 2025學(xué)校特色浴池項(xiàng)目投資合作承包協(xié)議3篇
- 二零二五版林業(yè)用地林權(quán)登記與使用權(quán)轉(zhuǎn)讓合同4篇
- 2025年活性艷藍(lán)EF-2G行業(yè)深度研究分析報(bào)告
- 2025年混紗紡項(xiàng)目可行性研究報(bào)告
- 2025年度車庫(kù)停車場(chǎng)服務(wù)收費(fèi)標(biāo)準(zhǔn)協(xié)議4篇
- 沐足中心員工勞動(dòng)合同范本(2025年度含績(jī)效考核)4篇
- 二零二五版網(wǎng)絡(luò)借貸平臺(tái)借款合同風(fēng)險(xiǎn)控制指南3篇
- 中醫(yī)診療方案腎病科
- 2025年安慶港華燃?xì)庀薰菊衅腹ぷ魅藛T14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級(jí)下冊(cè)數(shù)學(xué)第七章 相交線與平行線 單元測(cè)試卷(含答案)
- GB/T 44351-2024退化林修復(fù)技術(shù)規(guī)程
- 從跨文化交際的角度解析中西方酒文化(合集5篇)xiexiebang.com
- 中藥飲片培訓(xùn)課件
- 醫(yī)院護(hù)理培訓(xùn)課件:《早產(chǎn)兒姿勢(shì)管理與擺位》
- 《論文的寫作技巧》課件
- 空氣自動(dòng)站儀器運(yùn)營(yíng)維護(hù)項(xiàng)目操作說(shuō)明以及簡(jiǎn)單故障處理
- 2022年12月Python-一級(jí)等級(jí)考試真題(附答案-解析)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識(shí)
評(píng)論
0/150
提交評(píng)論