軟件工程畢業(yè)論文基于laravel框架的個人博客發(fā)布系統(tǒng)的設計與實現(xiàn)_第1頁
已閱讀1頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b>  (20 屆)</b></p><p>  基于laravel框架的個人博客發(fā)布系統(tǒng)的設計與實現(xiàn)</p><p>  所在學院 </p><p>  專業(yè)班級

2、 軟件工程 </p><p>  學生姓名 學號 </p><p>  指導教師 職稱 </p><p>  完成日期 年 月 </p><p>  閩江學院畢業(yè)論文(設計)誠信聲明

3、書</p><p><b>  本人鄭重聲明:</b></p><p>  茲提交的畢業(yè)論文(設計)《基于laravel框架的個人博客發(fā)布系統(tǒng)》,是本人在指導老師 的指導下獨立研究、撰寫的成果;論文(設計)未剽竊、抄襲他人的學術觀點、思想和成果,未篡改研究數(shù)據(jù),論文(設計)中所引用的文字、研究成果均已在論文(設計)中以明確的方式標明;在畢業(yè)論文(設

4、計)工作過程中,本人恪守學術規(guī)范,遵守學校有關規(guī)定,依法享有和承擔由此論文(設計)產(chǎn)生的權利和責任。</p><p><b>  聲明人(簽名):</b></p><p><b>  摘 要</b></p><p>  本管理個人博客系統(tǒng)是的制作想法是因為目前大多的博客平臺的寫作方式以及博文的管理方式都太過于傳統(tǒng)以及繁瑣

5、,所以我希望吧markdown這種寫作方式帶給大家,讓大家可以感受到markdown這種寫作方式帶來的寫作快感。也希望位自己制作一個新的寫作平臺,建檔方便的寫作平臺。</p><p>  我希望搭建一個美觀使用良好的博客系統(tǒng),可以用來記錄自己的平日的靈感或者是作為生活筆記。本人使用博客很長時間了,也深刻體會到一個博客系統(tǒng)對于一個技術人員的重要性。如果是一個程序員的話博客相當于是技術沉淀的一種方式。</p&g

6、t;<p>  博客系統(tǒng)最重要的是記錄方式,以及瀏覽的體驗。使用markdown的好處就是我們不需要進行復雜的富文本編輯器的操作,只需要特定的字符就可以進行文章的排版。Markdown編譯稱html之后我們可以加入對應的樣式表,可以做出我們想要的博客的樣子。本系統(tǒng)還提供了博客的編輯以及修改刪除的功能,讓博客的博主可以快速的進行博客的管理,還提供了博客的評論的功能,讓博客的瀏覽用戶可以對博客進行評價,這樣就能提供很好的交流方

7、式。</p><p>  本系統(tǒng)的前端使用最新的組件化開發(fā)的方式,使用vuejs這個框架進行開發(fā)。前端單頁應用和后端api分開,讓耦合性大大的降低。這樣前端和后端的開發(fā)可以完全的分開。Markdown編輯器使用的是editer.md這個開源的編輯器,可以很輕松的集成到網(wǎng)站中進行使用。</p><p>  關鍵詞:laravel;博客系統(tǒng);php;docker;mysql;B/S模式<

8、/p><p><b>  Abstract</b></p><p>  This management personal blog system yes production idea because the present most blogging platform of writing and the way the post management is too t

9、raditional and trival, so I hope the markdown this way of writing to you, let you can feel the markdown this way of writing brings the pleasure of writing.Also hope to make you own a new writing platform, by inputting a

10、convenient platform for writing.</p><p>  I hope to build a beautiful and use good blog system, which can be used to record their daily inspiration or as life notes.I use the blog for a long time, also deepl

11、y realized a blog system for the importance of a technician.If you are a programmer blog quite a way and technology precipitation.</p><p>  Blog system is the most important record, as well as the browsing e

12、xperience.Using the advantage of the markdown is we don't need to do a complex operation, rich text editor only need specific character can be an article typesetting.Markdown compiled according to the HTML then we ca

13、n join the corresponding style sheets, can make what we want the look of the blog.This system also provides the functionality of the edit and modify delete blog, blog can quickly manage the blog, also provides the fun<

14、;/p><p>  The front of this system using the latest modular development way, using vuejs this framework for development.Front page application from the backend API, let coupling greatly reduced.This front end a

15、nd back end development can be completely separated.Markdown editor using the editer. md, of the open source editor, can be easily integrated into the website to use.</p><p>  Keywords: laravel;blog system;

16、PHP;Docker.Mysql;B/S mode</p><p><b>  目 錄</b></p><p><b>  1、引言1</b></p><p>  1.1 博客管理系統(tǒng)的意義1</p><p>  1.2 博客管理方式以及寫作方式的發(fā)展1</p><p>

17、;  1.3 預期功能1</p><p>  2、開發(fā)工具簡介3</p><p>  2.1 laravel簡介3</p><p>  2.2 MySQL3</p><p>  2.3 包管理--composer3</p><p>  2.4 vuejs4</p><p>  3、系

18、統(tǒng)可行性研究5</p><p>  3.1 可行性分析5</p><p>  3.2系統(tǒng)需求分析5</p><p>  3.2.1 博客系統(tǒng)身份功能6</p><p>  3.2.2 博客頁面顯示模塊6</p><p>  3.2.3 博客個人維護模塊6</p><p>  3.2.

19、4 后臺管理系統(tǒng)7</p><p>  4、博客系統(tǒng)設計8</p><p>  4.1 博客系統(tǒng)模塊結構設計8</p><p>  4.1.1 數(shù)據(jù)庫的連接8</p><p>  4.1.2 確定該系統(tǒng)要實現(xiàn)的功能9</p><p>  4.2 博客功能模塊設計10</p><p>

20、  4.3 博客數(shù)據(jù)庫設計13</p><p>  4.3.1 數(shù)據(jù)庫結構13</p><p>  4.3.2 數(shù)據(jù)庫邏輯數(shù)據(jù)模型16</p><p>  4.3.3 數(shù)據(jù)庫的實現(xiàn)17</p><p>  5、詳細設計與實現(xiàn)21</p><p>  5.1 詳細設計概述21</p><p

21、>  5.2 讀者用戶功能實現(xiàn)21</p><p>  5.2.1 讀者用戶注冊頁面21</p><p>  5.2.2 用戶登錄22</p><p>  5.2.4查看博客詳細內容27</p><p>  5.2.4 評論添加30</p><p>  5.2.6 文章編寫模塊34</p>

22、<p>  5.3 系統(tǒng)管理員后臺35</p><p>  5.3.1 后臺數(shù)據(jù)管理35</p><p>  5.3.3 后臺管理員信息管理37</p><p><b>  6、系統(tǒng)測試42</b></p><p>  6.1 系統(tǒng)登錄測試42</p><p>  6.2

23、文章發(fā)表測試43</p><p>  6.3 后臺博客數(shù)據(jù)查看測試登錄測試以及種類添加測試44</p><p><b>  7、結束語46</b></p><p><b>  7.1 感言46</b></p><p>  7.2 不足及啟發(fā)46</p><p>&l

24、t;b>  致謝48</b></p><p><b>  1、引言</b></p><p>  1.1 博客管理系統(tǒng)的意義</p><p>  網(wǎng)絡技術現(xiàn)在已經(jīng)廣泛的應用在我們的生活中了,以前的聯(lián)系方式也正在改變,然而博客是一個非常重要的一個媒介。博客現(xiàn)在已經(jīng)是一個大眾交流的一個重要載體,我們可以通過博客記錄我們自己的很多事

25、情以及工作上的經(jīng)驗等等內容,網(wǎng)絡博客十分方便我們去記錄我們日常中需要記錄的東西</p><p>  博客文章都是通過時間或者關注以及喜歡程度進行排列的,常見的是越多人閱讀的博客就會月拍在前面。比如博客園中很多的博客都可以提供很多的專業(yè)知識以及專業(yè)的英文技術文章的翻譯,也有個別大牛的日常生活也會有人圍觀,博客現(xiàn)在作為一個文字媒體收到了很多人的關注。博客給那些需要學習他人經(jīng)驗的人帶了許多的便利,好學的人可以有很多的收

26、獲。</p><p>  1.2 博客管理方式以及寫作方式的發(fā)展</p><p>  博客是一種人類寫作在網(wǎng)上的一種方式,一般來說是通過經(jīng)常更新的文章列表構成的,這些文章都是通過日期以及受關注來進行排序的。Blog的內容可以你是自己的的想法,也可以對于是某些事情的評價,或者是對你生活的分享,或者是你做的有趣的事情等等</p><p>  最近出現(xiàn)的新的博客寫作方式m

27、arkdown。Markdown可以看作是一種寫作的編程語言,我們可以使用特殊的符號寫出漂亮的文章。</p><p>  Markdown是一種新型的渲染型的寫作方式,代表著一種極客的潮流。他簡介的和易于入手的寫作語法對比那些笨重的富文本工具,看起來清新有好用。Markdown現(xiàn)在最大的使用人群是碼農(nóng),因為現(xiàn)在github的盛行,每個項目中都會用到readme.md來對項目進行說明。Markdown可以使用簡介的

28、語法書寫復雜的文章,條理清晰而且易于觀看。Markdown可以使用特殊符號來創(chuàng)建表格,分割線,圖片,引用,列表等?,F(xiàn)在也有很多開源的markdown編輯器可以使用,可以說是十分的方便。</p><p><b>  1.3 預期功能</b></p><p>  現(xiàn)在的博客系統(tǒng)最主要的還是寫作的功能,寫作必須舒適而且快速,這個是博客系統(tǒng)是否好用的一個關鍵因數(shù)。對于想最早的

29、時候人們寫的博客都是以日記的方式記錄,這種方式在現(xiàn)在過于原始。本篇論文主要描述了開發(fā)實現(xiàn)博客關系系統(tǒng)的設計步驟,開發(fā)運用的那些工具以及所能實現(xiàn)的功能。</p><p>  (1)注冊登陸,這里是讓用戶可以對本系統(tǒng)進行用戶的注冊,我們可以新建賬號來使用系統(tǒng)</p><p>  (2)博客內容書寫 博客內容的書寫使用的是editer.md這個開源的html5的markdown編輯器,可以快速的

30、盡心博客的編輯。</p><p>  (3)博客內容評論 博客評論是博主和博客瀏覽者的互動關鍵的功能。</p><p>  (4)博客內容修改 博客的修改時一個修訂博客文章的手段,博文在發(fā)表之后如果存在錯誤就要進行必要的修改,以保證博客的質量。</p><p>  (5)博客內容刪除 博客內容需要博主自己來進行管理,不需要的,或者需要刪除的博客博主可以自行刪除。&l

31、t;/p><p>  (6)博客用戶管理 博客用戶會非常的多的,我們如果是管理員的話我們應該有一個平臺來管理這些用戶。</p><p>  (7)博客點贊 博客點贊是一個統(tǒng)計博客受歡迎程度的一個重要的環(huán)節(jié)</p><p>  (8)博客分類以及搜索系統(tǒng) 博客分類和搜索時一個博客博文系統(tǒng)友好度的關鍵,博客是然人來閱讀的,需要有一個良好的分類系統(tǒng)以及搜索的模塊來然用戶進行搜

32、索。</p><p>  (9)后臺用戶權限系統(tǒng) 后臺系統(tǒng)需要進行權限分配,讓管理員可以分派各個模塊讓不同的人進行管理。</p><p>  (10)前段組件化 前端的組件化可以讓前端的單頁面應用編程更加快速。</p><p>  (11)跨域api調用 由于這個后端只是提供api給前端使用,我們就要進行跨域登陸,來解決不同的域名api調用的問題。</p>

33、;<p><b>  2、開發(fā)工具簡介</b></p><p>  2.1 laravel簡介</p><p>  laravel是一個以優(yōu)雅為特點的開發(fā)框架,使用composer管理依賴包,各種依賴各種強大的包,使得laravel框架異常強大。</p><p>  在laravel中有一個高級的orm查詢類庫--Eloquent

34、 ORM,他能進行強大的數(shù)據(jù)庫查詢,比如關聯(lián)查詢以及各種復雜where查詢,join查詢。以及對表和php類的對象映射,這樣可以滿足程序員不用寫sql語句就可以進行快速的sql查詢。</p><p>  Laravel的控制器是十分的靈活可以直接在路由中進行聲明,而且語法很優(yōu)雅,具有很多亮眼的特性。這個路由的設計理念是可以有最大的靈活性,又不會失去作為可以構建大型企業(yè)應用的性能。</p><p

35、><b>  2.2 MySQL</b></p><p>  Mysql最早只是一些小型的互聯(lián)網(wǎng)公司在使用,而現(xiàn)在越來越多的使用在大型的網(wǎng)站中了,也經(jīng)受住了高并發(fā)的考驗。</p><p>  Mysql是互聯(lián)網(wǎng)公司最為喜愛的數(shù)據(jù)庫系統(tǒng),因為其社區(qū)的活躍以及開源的性質,是的mysql被廣泛的修改以及使用。包括國內的bat都在使用mysql作為系統(tǒng)的數(shù)據(jù)庫軟件平臺。

36、而且mysql可以方便的搭建出讀寫分離的架構,可以快速的進行數(shù)據(jù)庫的集群部署。而且還有很好的兼容性,可以再各個平臺上面安裝數(shù)據(jù)庫,包括windows,unix以及各大linux系統(tǒng)</p><p>  2.3 包管理--composer</p><p>  由于composer 的出現(xiàn)php才會有一個統(tǒng)一的規(guī)范,使得不用一直造輪子。方便了PHP開發(fā)人員,也讓php的代碼越來越規(guī)范化。Com

37、poser提供了一個統(tǒng)一autoload的方案,使用的是psr3的規(guī)范,命名空間和文件加路徑相互映射提供靈活的php文件的require方式。</p><p>  Composer還提供了一個遠程的代碼庫,可以使用簡單的命令就可以下載代碼包到本地進行使用。這個代碼庫還可一和git以及svn等工具一起聯(lián)動,可以講git和svn的庫當成代碼包來使用。而且只需要簡單的創(chuàng)建一個composer.json就可以進行代碼包的

38、管理以及下載。</p><p><b>  2.4 vuejs</b></p><p>  Vue是一個組件化的解決方案,可以快速搭建組件化的網(wǎng)頁,以及單頁的應用。而且vue提供許多的第三方的包支持。</p><p>  我們使用vue可以進行方便的動態(tài)數(shù)據(jù)到界面的更新,這得益于vue提供的雙向的數(shù)據(jù)綁定,我們可以直接操作對應的data數(shù)據(jù)就可

39、以吧相應的改變顯示在界面上。Vue這類框架的出現(xiàn)直接催生了web單頁應用的熱潮。Web單頁應用的用戶體驗很好,現(xiàn)在的web都在網(wǎng)單頁應用發(fā)展,一個像app一樣的網(wǎng)頁可以帶來顛覆性的體驗。</p><p>  Vue的組件化是通過利用js的元素的get和set方法來實現(xiàn)的,然后動態(tài)堅挺get以及set的變化來進行頁面數(shù)據(jù)的渲染。我在項目中還是用了一個vue組件的路由框架 vue-route以及vue組件的外部數(shù)據(jù)管

40、理框架vuex來搭建一個強大的web應用。</p><p><b>  3、系統(tǒng)可行性研究</b></p><p><b>  3.1 可行性分析</b></p><p>  博客系統(tǒng)是一個網(wǎng)絡世界中很成熟的系統(tǒng)了,從最早的網(wǎng)絡出現(xiàn)開始就有博客系統(tǒng)的存在。</p><p>  本博客系統(tǒng)前端使用vu

41、e框架進行組件化開發(fā)。使用的是前后分離的模式,前端在本系統(tǒng)中相當于一個應用,然后作為一個應用的身份對接后臺系統(tǒng)api。系統(tǒng)的登陸認證方式是使用oauth2.0的方式進行,使用access_token的方式進行身份驗證。使用access_token這種方式進行身份驗證的好處是相對于傳統(tǒng)的session方式更加靈活,并且很容易實現(xiàn)跨域的登錄機制,使用cors的方式進行跨域。</p><p>  存儲系統(tǒng)使用的是mys

42、ql關系數(shù)據(jù)庫,對于用戶數(shù)據(jù)以及博客數(shù)據(jù)可以進行完整的增刪改查,使用mysql搭建mysql主從分離的實現(xiàn)性能的提升。由于沒有多臺電腦進行支持我使用輕量級的虛擬容器docker進行mysql主從的搭建??梢源蟠筇嵘齧ysql的并發(fā)性能。</p><p>  因為這個博客系統(tǒng)是一個每個人都可以注冊發(fā)布信息的系統(tǒng)所以必須有個后臺來管理這些內容。對于系統(tǒng)后臺對于美觀度以及邏輯都不是要求很高,大多數(shù)都是盡心數(shù)據(jù)的管理。所

43、以我選擇了使用laravel的的一個開源的后臺系統(tǒng)laravel-admin。這個系統(tǒng)可以快熟搭建一個完整的后臺系統(tǒng),對于快速開發(fā)很有用處。</p><p>  綜上所述,系統(tǒng)的制作是完全可行的。</p><p><b>  3.2系統(tǒng)需求分析</b></p><p>  博客系統(tǒng)是一個集成書寫和查看的系統(tǒng)。</p><p&

44、gt;  (1)用戶博客書寫功能 這個是這個系統(tǒng)最為關鍵的點;</p><p>  (2)用戶的博客管理功能 可以對博客進行細致的管理 包括博文內容的詳細修改,博客標題的修改,以及博文投稿類目的修改;</p><p>  (3)博客用戶個人信息管理; </p><p>  (4)博客用戶評論以及回復的功能;</p><p>  (5)博客用戶

45、點贊的功能 當喜歡文章的時候可以進行點贊 這個數(shù)據(jù)之后可以用來進行推薦使用;</p><p>  (6)超級管理員后臺管理全部的博客;</p><p>  (7)超級管理員管理后臺全部評論;</p><p>  3.2.1 博客系統(tǒng)身份功能</p><p>  個人博客發(fā)布系統(tǒng)有種角色:博客訪問者及系統(tǒng)管理員。博客訪問這包括博主以及游客,系統(tǒng)

46、管理員可以內部進行分級,通過隱藏菜單進行分級。我們可以使用博客訪問者的身份瀏覽博客的內容,通過博客系統(tǒng)管理員的身份進行博客內容的管理,可以管理博客的分類以及博客的評論等等內容。</p><p>  3.2.2 博客頁面顯示模塊</p><p>  當網(wǎng)絡用戶進入某個人博客主頁后沒再該頁面中將提供博客日志列表的顯示,同時為了方便用戶瀏覽,在該模塊中提供根據(jù)分類進行日志列表的顯示,也提供日志評

47、論的瀏覽,此外還允許用戶在博客頁面中發(fā)表評論及留言。 </p><p>  (1) 用戶可以分頁查看對應評論信息;</p><p>  (2) 用戶可以針對日博客內容發(fā)表評論;</p><p>  (3) 用戶可以針對博客進行留言;</p><p>  (4) 用戶可以分類查看日志內容;<

48、;/p><p>  (5) 個人博客書寫內容的顯示;</p><p>  (6) 個人以及全部博客列表的顯示。</p><p>  3.2.3 博客個人維護模塊</p><p>  這個模塊用戶讓博主可以管理和維護自己的博客。博客個人維護該功能模塊實現(xiàn)了如下幾個子功能:</p><p>  (1)博客的

49、詳細內容管理; </p><p>  (2)評論及留言查看;</p><p>  (3)個人基本信息維護管理。 </p><p>  這個模塊讓用戶可以對個人博客中的內容進行修改,可以對博文的文章內容進行修改,以及查看博文的評論等等功能。</p><p>  前端系統(tǒng)流程圖如下圖3-1 所示:</p><

50、;p>  圖3-1 系統(tǒng)流程圖</p><p>  3.2.4 后臺管理系統(tǒng)</p><p>  后臺管理系統(tǒng)是一個收集博客數(shù)據(jù)以及管理博客數(shù)據(jù)的系統(tǒng),對博客數(shù)據(jù)進行管理,對評論數(shù)據(jù)進行管理。維護博客以及網(wǎng)站的治安。</p><p>  下面是后臺管理系統(tǒng)的登錄流程以及后臺管理系統(tǒng)的權限判斷流程如圖3-2所示: </p><p>  圖

51、3-2 系統(tǒng)流程圖</p><p><b>  4、博客系統(tǒng)設計</b></p><p>  4.1 博客系統(tǒng)模塊結構設計</p><p>  4.1.1 數(shù)據(jù)庫的連接</p><p>  數(shù)據(jù)庫pdo鏈接配置前臺是通過使用phero類庫進行管理,使用配置文件記錄數(shù)據(jù)庫的鏈接參數(shù)。后臺使用的是laravel的數(shù)據(jù)庫類庫進

52、行數(shù)據(jù)庫鏈接,配置文件在laravel項目根目錄的.evn文件中進行配置</p><p>  下面是配置文件具體代碼,位置在config.php文件中,代碼如下所示:</p><p><b>  return [</b></p><p>  "database" => [</p><p>  &

53、quot;master" => [</p><p>  "dsn" => "mysql:dbname=blog;host=localhost",</p><p>  "user" => "root",</p><p>  "password"

54、; => "lerko",</p><p><b>  ]</b></p><p><b>  ],</b></p><p><b>  ];</b></p><p>  下面是數(shù)據(jù)庫鏈接的核心代碼位于PdoWarehouse.php文件中,代碼如下所

55、示:</p><p><b>  //根據(jù)數(shù)據(jù)</b></p><p>  public function getPdo($pattern) {</p><p>  $database_config = Config::config("database");</p><p>  $hit_classn

56、ame = Config::config('hit_rule');</p><p>  if (empty($hit_classname)) {</p><p>  $hit_classname = "Phero\Database\Realize\Hit\RandomSlaveHit";</p><p><b>  }&

57、lt;/b></p><p>  $this->pdo_hit = new $hit_classname;</p><p>  $this->init($database_config);</p><p><b>  //注入后解析</b></p><p>  $this->inject();&l

58、t;/p><p>  if (is_array($this->pdo)&&!empty($this->pdo['slave'])&&!empty($this->pdo['master'])) {</p><p>  if ($pattern == 0) {</p><p>  $pdo =

59、 $this->pdo_hit->hit($this->pdo['slave']);</p><p><b>  } else {</b></p><p>  $pdo = $this->pdo['master'];</p><p><b>  }</b></p

60、><p>  } else if(is_array($this->pdo)&&empty($this->pdo['slave'])&&!empty($this->pdo['master'])) {</p><p>  $pdo = $this->pdo['master'];</p>

61、;<p><b>  }else{</b></p><p>  $pdo=$this->pdo;</p><p><b>  }</b></p><p>  $charset = Config::config('hit_rule');</p><p>  $cha

62、rset = empty($charset) ? "utf8" : $charset;</p><p>  $pdo->exec("set names $charset");</p><p>  $pdo->exec("set character_set_client=$charset");</p>&l

63、t;p>  $pdo->exec("set character_set_results=$charset");</p><p>  //PDO::ATTR_STRINGIFY_FETCHES 提取的時候將數(shù)值轉換為字符串。 </p><p>  //PDO::ATTR_EMULATE_PREPARES 啟用或禁用預處理語句的模擬。</p>&l

64、t;p>  $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);</p><p>  $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);</p><p>  return $pdo;</p><p><b>  }</

65、b></p><p>  4.1.2 確定該系統(tǒng)要實現(xiàn)的功能</p><p>  個人博客系統(tǒng)是一個需要包含前臺的博客發(fā)布以及后臺的博文等內容管理的系統(tǒng)</p><p>  (1)用戶博客書寫功能 這個是這個系統(tǒng)最為關鍵的點;</p><p>  (2)用戶個人博客管理功能 可以對博文內容進行管理,對博文內容進行編輯以及博文的投稿區(qū)域;

66、</p><p>  (3)用戶個人信息管理; </p><p>  (4)用戶評論以及回復的功能;</p><p>  (5)用戶點贊的功能 當喜歡文章的時候可以進行點贊 這個數(shù)據(jù)之后可以用來進行推薦使用;</p><p>  (6)超級管理員后臺管理全部的博客;</p><p>  (7)超級管理員管理后臺全部評論

67、;</p><p>  (8)超級管理員后臺管理全部種類;</p><p>  (9)超級管理員權限分配;</p><p>  (10)后臺超級管理員資料編輯;</p><p>  (11)后臺管理博客用戶資料。</p><p>  4.2 博客功能模塊設計</p><p>  系統(tǒng)的功能模塊主

68、要分為:系統(tǒng)管理員和博客書寫用戶。這兩大模塊又分別有許多細化的功能模塊。</p><p><b>  前臺包括如下模塊:</b></p><p>  (1)用戶信息管理模塊;</p><p>  (2)個人博客的發(fā)布;</p><p>  (3)個人博客的管理;</p><p>  (4)個人博客

69、的評論系統(tǒng);</p><p>  (5)博文搜索模塊;</p><p>  (6)博文排序標簽模塊。</p><p><b>  后臺包括如下模塊:</b></p><p>  (1)所有博客信息管理;</p><p>  (2)所有博客用戶管理;</p><p>  (3

70、)所有博客評論管理;</p><p>  (4)所有博客分類管理;</p><p>  (5)后臺博客管理員權限分配;</p><p>  (6)后臺博客管理員用戶管理;</p><p>  (7)后臺分級菜單管理。</p><p>  如下圖 4-1所示:</p><p>  圖4-1 系統(tǒng)模

71、塊圖</p><p>  4.3 博客數(shù)據(jù)庫設計</p><p>  4.3.1 數(shù)據(jù)庫結構</p><p>  數(shù)據(jù)結構圖的意義在于可以直觀的看出數(shù)據(jù)庫的大體結構,我們可以通過數(shù)據(jù)庫結構圖直接看出數(shù)據(jù)庫的設計思路,這樣的數(shù)據(jù)庫結構圖清晰易懂。數(shù)據(jù)庫結構圖的意義在于前期的設計可以有很大的設計價值。</p><p>  用戶模型E-R圖,如圖

72、4-2所示:</p><p>  圖4-2 用戶E-R圖</p><p>  種類模型圖,如圖所示 圖 4-3所示:</p><p>  圖 4-3 種類E-R模型</p><p>  博客實體模型E-R圖,如圖所示 圖4-4所示:</p><p>  圖 4-4 博客實體E-R圖</p><p&g

73、t;  留言實體模型E-R如圖所示 圖 4-5所示。</p><p>  圖 4-5 留言模型</p><p>  后臺管理員模型E-R圖,如圖 4-6 所示:</p><p>  圖 4-6 后臺管理員</p><p>  Auth2.0數(shù)據(jù)模型E-R 圖 4-7所示:</p><p>  圖 4-7 Auth2.0

74、數(shù)據(jù)表</p><p>  反應整個系統(tǒng)的模型之間關系的總的E-R圖 如圖4-8 所示:</p><p>  圖 4-8 總er圖</p><p>  4.3.2 數(shù)據(jù)庫邏輯數(shù)據(jù)模型</p><p>  Er圖模型只是一個概念化的數(shù)據(jù)庫模型,和數(shù)據(jù)庫實體只有邏輯上面的相似性。我們這里加入從er轉化稱具體的模型字段的描述。使用文字描述說明數(shù)據(jù)庫

75、表的詳細信息。這里舉出幾個重要的表結構:</p><p>  系統(tǒng)數(shù)據(jù)庫沒有設置表的物理關系</p><p>  (1)博客表(博客id,內容,markdown原文,創(chuàng)建時間,更新時間,訪問次數(shù),喜歡次數(shù));</p><p>  (2)用戶表(用戶id,用戶名,用戶密碼,創(chuàng)建時間,更新時間,用戶頭像,電話,郵箱);</p><p>  (3)

76、種類表(種類id,種類名稱);</p><p>  (4)auth2.0驗證表(訪問id,用戶id,鏈接id,激活標識,授權范圍,生存時間);</p><p>  (5)后臺管理員表(用戶名,創(chuàng)建時間,信息更新時間,管理員頭像路徑,密碼);</p><p>  (6)博客表(博客id,內容,markdown原文,創(chuàng)建時間,更新時間,訪問次數(shù),喜歡次數(shù))。</p

77、><p>  4.3.3 數(shù)據(jù)庫的實現(xiàn)</p><p>  將E-R圖轉換稱mysql可以識別和創(chuàng)建的表結構描述,標注相應的數(shù)據(jù)結構和相應的描述。</p><p> ?。?)博客信息表:用于記錄博客的內容 如表 4-1 所示</p><p><b>  4-1博客信息表</b></p><p> ?。?/p>

78、2)用戶信息表:用于記錄用戶信息 如表4-2 所示:</p><p><b>  4-2 用戶信息表</b></p><p> ?。?)評論信息表:用于記錄評論信息, 如表4-3 所示:</p><p><b>  4-3評論信息表</b></p><p>  (4)Auth2.0驗證數(shù)據(jù)記錄表 如

79、表所示 4-4所示:</p><p>  4-4 Auth2.0的驗證數(shù)據(jù)記錄表</p><p> ?。?)種類信息表模型如表4-5所示:</p><p><b>  4-5 博客種類表</b></p><p> ?。?)種類信息表模型如表4-5所示:</p><p><b>  4-5

80、 博客種類表</b></p><p><b>  5、詳細設計與實現(xiàn)</b></p><p>  5.1 詳細設計概述</p><p>  詳細設計的概述的為了描述出真?zhèn)€系統(tǒng)的細節(jié)和全貌,從點上描述整個系統(tǒng)的功能。這樣后期可以更好的制作系統(tǒng),使得整個系統(tǒng)的制作流程井井有條。我們可以從這個描述中看出所有功能的詳細需求。</p&g

81、t;<p>  詳細設計概述講述了整個設計流程以及設計的功能點,對整個系統(tǒng)的設計進行了闡述。</p><p>  整個系統(tǒng)的架構是由一個前端的單頁應用以及一個后端的管理系統(tǒng),還有一個api系統(tǒng)構成的,他們的關系如圖 5-1 所示:</p><p>  圖5-1 系統(tǒng)架構圖</p><p>  5.2 讀者用戶功能實現(xiàn)</p><p&

82、gt;  5.2.1 讀者用戶注冊頁面</p><p>  當新的博客用戶進入系統(tǒng)的時候,如果要發(fā)布自己的博文,那么就需要進行注冊成為這個博客系統(tǒng)的博主。這樣才能進行博客的發(fā)表。注冊界面只需要填入用戶名以及密碼,密碼需要重復兩次,核對用戶沒有輸入錯誤。如果輸入正確系統(tǒng)就會提示博客的博主身份注冊成功。這里密碼的保存使用的是加鹽的技術,能夠防止如果數(shù)據(jù)庫泄露之后用戶的密碼被破解或者識別。</p><

83、;p>  用戶注冊界面如圖5-2所示:</p><p><b>  圖5-2 用戶注冊</b></p><p>  注冊的時候使用password_hash()這個php提供的加鹽函數(shù)對密碼進行加密,讀者用戶注冊信息的核心代碼在UserController.php文件中,如下:</p><p>  public function regi

84、ster(ServerRequestInterface $request,ResponseInterface $response,array $args)</p><p><b>  {</b></p><p>  $parsedBody=$request->getParsedBody();</p><p>  $UserEntity=n

85、ew UserEntity();</p><p>  $UserEntity->username=$parsedBody['username'];</p><p>  $UserEntity->password=password_hash($parsedBody['password'],PASSWORD_DEFAULT);</p>

86、<p>  $effect=$UserEntity->insert();</p><p>  if($effect)</p><p>  return new JsonResponse([]);</p><p><b>  else</b></p><p>  return new JsonRespons

87、e(['error_msg'=>"注冊失敗"],422);</p><p><b>  }</b></p><p>  5.2.2 用戶登錄</p><p>  輸入用戶名以及密碼,然后用戶點擊登錄,登錄成功的話系統(tǒng)就會跳轉到首頁提示登錄成功。這里使用的是auth2.0的password驗證登錄方式,登

88、錄之后在頁面中吧access_token(訪問令牌)寫入cookie,之后的請求都在http頭上面寫入相應的驗證頭,用來驗證信息。如果瀏覽器攜帶的http頭中包含的訪問令牌是正確的話就可以正確的調用api。訪問令牌的生存時間為1天,如果范文令牌失效了就要通過refresh_token重新獲取。 如圖5-3所示:</p><p>  圖5-3登錄系統(tǒng)界面</p><p>  登錄流程圖如圖5

89、-4所示。</p><p>  圖5-4管理員登錄流程圖</p><p>  5.2.3 博客列表</p><p>  博客列表使用vue進行渲染,使用vuex對外部數(shù)據(jù)進行管理。這里如果刪除博客的話頁面不會進行刷新,直接將博客文章的入口從頁面中去除。這個功能歸功于vue的雙向綁定技術,可以使得控制數(shù)據(jù)和頁面的交互十分流暢。登錄成功瀏覽博客的頁面 圖5-5:<

90、/p><p>  圖5-5 博客瀏覽界面</p><p>  博客列表的代碼在ArticleController.php文件中,從數(shù)據(jù)庫中獲取文章列表。如下:</p><p>  public function getFrontArticleList(ServerRequestInterface $request,ResponseInterface $response,

91、array $args){</p><p>  $queryParam=$request->getQueryParams();</p><p>  $currentPage=$queryParam["currentPage"];</p><p>  $itemsPerPage=$queryParam["itemsPerPage&q

92、uot;];</p><p>  $sortName=$queryParam["sortName"];</p><p>  $key_word=$queryParam['key_word'];</p><p>  $tagId=$queryParam['tagId'];</p><p>  

93、if($sortName=="publish_time"){</p><p>  $sortName="create_time";</p><p><b>  }else{</b></p><p>  $sortName="visit_count";</p><p&

94、gt;<b>  }</b></p><p>  $Blog=new BlogEntity();</p><p>  $entity=Tool::getInstanct()->Page($Blog,$currentPage,$itemsPerPage);</p><p>  if($key_word) {</p><p

95、>  // $userEntity=new UserEntity();</p><p>  // $userEntity->whereEq('id','blog.id');</p><p>  $entity->whereLike("title",'%'.$key_word.'%')<

96、;/p><p>  ->whereOrLike("markdown",'%'.$key_word.'$');</p><p>  // ->whereOrExists("user.username",$userEntity);</p><p><b>  }</b>

97、</p><p>  if($sortName=='my') $entity->whereEq('uid',$request->getAttribute("user_id"));</p><p>  if(isset($tagId)&&!empty($tagId))</p><p>  

98、$entity->whereEq("tag_id",$tagId);</p><p>  $data=$entity->order($sortName,"DESC")->select();</p><p>  $xdebug_sql=$entity->sql();</p><p>  $result=[

99、"data"=>[]];</p><p>  foreach ($data as $key => $value) {</p><p>  $result["data"][]=[</p><p>  "_id"=>$value['id'],</p><p&

100、gt;  "title"=>$value['title'],</p><p>  "publish_time"=>Tool::getInstanct()->date_format_iso8601($value['create_time']),</p><p>  "like_count&qu

101、ot;=>$value['like'],</p><p>  "comment_count"=>rand(1,50),</p><p>  "visit_count"=>$value['visit_count'],</p><p>  "images"=&g

102、t;ArticleDataAccess::getImageList($value['id']),</p><p>  "uid"=>$value['uid']</p><p><b>  ];</b></p><p><b>  }</b></p>&

103、lt;p>  return new JsonResponse($result);</p><p><b>  }</b></p><p>  點擊我的博客會出現(xiàn)自己發(fā)布的博客文章的列表,這些都可以進行編輯和刪除,刪除是異步進行的,可以直接將界面中的對應文章從界面中移除不需要進行界面的刷新。如圖5-6所示:</p><p>  圖5-6 我

104、的博客tag</p><p>  5.2.4查看博客詳細內容</p><p>  不管是游客還是博主都能查看博客內容,博客內容通過markdown渲染過后的html直接顯示在頁面上。這里顯示的有讀者的數(shù)量以及喜歡本片文章的數(shù)量還有評論的數(shù)量。如圖5-7所示:</p><p>  圖5-7 博客瀏覽界面</p><p>  查詢博客內容信息的代

105、碼在在ArticleController.php文件中,如下代碼所示:</p><p>  5.2.5 喜歡文章</p><p>  可以喜歡文章,這個用于統(tǒng)計文章的熱度,如果評論數(shù)和閱讀數(shù)量越高的文章排序就會在越前面,喜歡之后不能重復點擊。如圖5-8所示:</p><p>  圖5-8 博客點贊界面</p><p>  點贊之后不能重復點贊

106、。如圖5-9所示:</p><p>  圖 5-9點贊之后的界面</p><p>  點贊核心代碼在ArticleController.php文件中,如下:</p><p>  //獲取文章詳細信息</p><p>  public function getFrontArticle(ServerRequestInterface $reques

107、t,ResponseInterface $response,array $args)</p><p><b>  {</b></p><p>  $Blog=new BlogEntity();</p><p>  $data=$Blog->whereEq("id",$args['id'])->fi

108、nd();</p><p>  $Blog->visit_count=$data['visit_count']+1;</p><p>  $Blog->whereEq("id",$args['id'])->update();</p><p>  return new JsonResponse([&

109、lt;/p><p><b>  "data"=>[</b></p><p>  "_id"=>$data['id'],</p><p>  "title"=>$data['title'],</p><p>  &qu

110、ot;publish_time"=>Tool::getInstanct()->date_format_iso8601($data['create_time']),</p><p>  "like_count"=>$data['like'],</p><p>  "visit_count"=&

111、gt;$Blog->visit_count,</p><p>  "comment_count"=>rand(1,50),</p><p>  "content"=>$data['content']</p><p><b>  ]</b></p><p

112、><b>  ]);</b></p><p><b>  }</b></p><p>  5.2.5 查詢博客內容</p><p>  可以查詢博客內容,這里的查詢可以對文章進行范查詢,這里的查詢文章內容使用了fulltext的全文索引,這樣來增加查詢文章的速度。文章查詢前端使用的是自動查詢,輸入文字自動改變查詢結果

113、,分配的查詢間隔時間為1秒。查詢內容包括文章內容以及文章標題如圖5-10所示:</p><p>  圖5-10博客查詢界面</p><p>  5.2.4 評論添加</p><p>  還可以對評論進行添加,添加評論之后直接顯示在界面上。評論保存的是評論的時間以及評論人的id到數(shù)據(jù)庫中。如圖5-11所示:</p><p>  圖5-11評論添

114、加界面</p><p>  添加評論的核心代碼在CommentController.php文件中,如下:</p><p><b>  //添加評論</b></p><p>  public function addNewComment(ServerRequestInterface $request,ResponseInterface $resp

115、onse,array $args)</p><p><b>  {</b></p><p>  $param=$request->getParsedBody();</p><p>  $UserId=$request->getAttribute("user_id");</p><p>  

116、$User=UserDataAccess::getUserInfoById($UserId);</p><p>  $CommentEntity=new CommentEntity();</p><p>  $CommentEntity->blog_id=$param["aid"];</p><p>  $CommentEntity->

117、;content=$param['content'];</p><p>  $CommentEntity->create_time=time();</p><p>  $CommentEntity->update_time=time();</p><p>  $CommentEntity->uid=$User["id&qu

118、ot;];</p><p>  $effect=$CommentEntity->insert();</p><p>  if($effect){</p><p><b>  //返回評論數(shù)據(jù)</b></p><p>  return new JsonResponse([</p><p>  

119、"success"=>true,</p><p><b>  "data"=>[</b></p><p><b>  "__v"=>0,</b></p><p>  "_id"=>$CommentEntity->g

120、etLastId(),</p><p>  "aid"=>$param['aid'],</p><p>  "content"=>$param['content'],</p><p>  "created"=>Tool::getInstanct()->

121、date_format_iso8601($CommentEntity->create_time),</p><p>  "replys"=>[],</p><p>  "status"=>1,</p><p>  "updated"=>Tool::getInstanct()->

122、date_format_iso8601($CommentEntity->update_time),</p><p>  "user_id"=>[</p><p>  "_id"=>$User['id'],</p><p>  "nickname"=>$User[

123、9;username'],</p><p>  "avatar"=>"http://api-lerko.ngrok.cc/UploadFile/avatar.jpg"</p><p><b>  ]</b></p><p><b>  ]</b></p>

124、<p><b>  ]);</b></p><p><b>  }else{</b></p><p>  return new JsonResponse(["error_msg"=>"評論失敗"],422);</p><p><b>  }</b>

125、;</p><p><b>  }</b></p><p>  這段代碼調用了UserDataAccess.php中的方法,這個類提供用戶信息獲取的實體。類的實體化代碼具體如下:</p><p>  class UserDataAccess</p><p><b>  {</b></p>

126、<p>  //獲取用戶信息通過id</p><p>  public static function getUserInfoById($uid)</p><p><b>  {</b></p><p>  $UserEntity=new UserEntity();</p><p>  $User=$Use

溫馨提示

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

最新文檔

評論

0/150

提交評論