背景
在開(kāi)始介紹博客搭建之前,先介紹下站主的開(kāi)發(fā)背景
- 博主主要從事 Android 開(kāi)發(fā)谭确,目前5年開(kāi)發(fā)經(jīng)驗(yàn)
- 同時(shí)熟悉小程序開(kāi)發(fā)和涉及一些前端開(kāi)發(fā)(主要是 vue 相關(guān)項(xiàng)目)
- Python 為站主從去年9月開(kāi)始自學(xué),用于公司內(nèi)部使用的爬蟲開(kāi)發(fā)和簡(jiǎn)單的接口開(kāi)發(fā)
- 因?yàn)橐咔槠陂g芬迄,延遲復(fù)工昂秃,萌生一個(gè)使用 Python 開(kāi)發(fā)個(gè)人博客網(wǎng)站的想法
幾個(gè)問(wèn)題
為什么不使用 WorldPress 或者 Hexo 這些成熟的個(gè)站模板來(lái)開(kāi)發(fā)個(gè)人博客?
站主的目的主要了解和學(xué)習(xí)整個(gè)Web開(kāi)發(fā)從前端到后端的完整開(kāi)發(fā)流程算途。作為一個(gè)前端開(kāi)發(fā)郊艘,了解和學(xué)習(xí)后端以及數(shù)據(jù)庫(kù)相關(guān)技術(shù)唯咬,可以更有效的提升自己,加強(qiáng)自己對(duì)整個(gè)項(xiàng)目的理解胆胰。
WorldPress 和 Hexo 這些模板使用雖然簡(jiǎn)單,但是非常依賴第三方瞎嬉,比如評(píng)論功能厚柳,就是集成的第三方,如果想要自己對(duì)其做些修改定制便监,就比較困難碳想。當(dāng)然,如果你只是關(guān)注最后的成果而不是過(guò)程逊移,那么 WorldPress 和 Hexo 是絕不會(huì)讓你失望的龙填。
為什么不用 Django 而是 Flask?
在 python web 開(kāi)發(fā)中岩遗,Django 可以說(shuō)是老大哥了,始終占據(jù)龍頭地位钳吟。但是 Flask 也不差窘拯,一直熱度高漲,提倡微服務(wù)概念暇番,更加靈活壁酬。當(dāng)然,對(duì)于站主這么一個(gè)剛接觸 python web 的新人來(lái)說(shuō)舆乔,其實(shí)都差不多希俩。那么只能根據(jù)站主自己的感覺(jué)來(lái)選擇了:
之前使用過(guò) flask 開(kāi)發(fā)過(guò)爬蟲接口,相對(duì)于 django璃搜,對(duì)于 flask 站主要更加熟悉一點(diǎn)
flask 比 django 晚出生5年鳞上,借鑒了 django 的經(jīng)驗(yàn),但是距離目前也有10年的歷史橘原,不是萌新趾断,站主當(dāng)時(shí)覺(jué)得可能更符合目前的技術(shù)潮流(要學(xué)就學(xué)最新的吩愧,當(dāng)前前提是穩(wěn)定有發(fā)展),并且 django 的開(kāi)發(fā)者也說(shuō) flask 是他們最開(kāi)始想要的樣子
github 上的star數(shù)量脐帝,flask 要比 django 多一些(但是兩者還是在同一數(shù)量級(jí)上的)糖权,對(duì)于站主這種不了解的新人來(lái)說(shuō),這也是一個(gè)選擇標(biāo)準(zhǔn)
然后最后一點(diǎn)疚顷,框架文檔是否齊全腿堤,當(dāng)時(shí)查詢時(shí),django 的文檔是非常齊全的笆檀,并且社區(qū)活躍酗洒。flask 站主也找了一個(gè)官方文檔和幾個(gè)翻譯文檔,感覺(jué)也算良好(當(dāng)時(shí)想的太簡(jiǎn)單:joy:)
綜上樱衷,基于對(duì)新技術(shù)的看好,站主選擇了 flask
個(gè)站功能梳理
驗(yàn)證模塊
因?yàn)椴⒉皇窍牒?jiǎn)單的做個(gè)靜態(tài)網(wǎng)頁(yè)展示封字,想有更多的人參與耍鬓,所以必須提供一個(gè)增加用戶的入口流妻,即注冊(cè)/登錄
- 登錄: 通過(guò)用戶名或者手郵箱登錄
- 注冊(cè): 填寫用戶名和郵箱進(jìn)行注冊(cè)(不使用手機(jī)號(hào)是因?yàn)椋l(fā)送驗(yàn)證短信需要小錢錢:joy:涣达,而郵箱每天有一定數(shù)量的免費(fèi)郵件)证薇,用戶角色分三種:普通用戶浑度、有寫作權(quán)限的用戶以及管理員
- 忘記密碼: 用戶忘記密碼后,通過(guò)注冊(cè)郵箱重置密碼
主模塊
主模塊是整個(gè)個(gè)站的入口甩骏,同時(shí)負(fù)責(zé)跳轉(zhuǎn)至其他模塊
- 文章展示: 根據(jù)指定規(guī)則(如發(fā)布時(shí)間倒序)來(lái)展示文章列表饮笛,支持分頁(yè)
- 側(cè)邊欄展示: 如文章分類论熙、文章標(biāo)簽等
- 關(guān)于: 關(guān)于站主和個(gè)站的描述,并且支持編輯(非靜態(tài))
文章模塊
- 文章詳情展示: 展示文章內(nèi)容
- 文章評(píng)論: 提供用戶評(píng)論素跺,支持二級(jí)評(píng)論誉券,需登錄用戶才可評(píng)論(很多個(gè)站都支持游客評(píng)論踊跟,但是考慮到新站沒(méi)有流量踩验,并且防止游客隨意填寫評(píng)論內(nèi)容鸥诽,初期開(kāi)放游客評(píng)論)
- 文章點(diǎn)贊: 用戶點(diǎn)贊的文章,可以在個(gè)人中心中查看
- 文章編輯: 支持文章在線創(chuàng)建和編輯(使用markdown)
個(gè)人中心模塊
因?yàn)橹皇莻€(gè)個(gè)人博客網(wǎng)站箕憾,和用戶交互不會(huì)太多牡借,個(gè)站的最主要目的是記錄和分享文章,重點(diǎn)在于文章編輯和展示袭异,個(gè)人中心中簡(jiǎn)單設(shè)計(jì)即可钠龙。
- 設(shè)置:用戶可在此頁(yè)編輯個(gè)人信息,如頭像御铃、用戶名等
- 我的私密文章: 用戶在創(chuàng)建文章時(shí)碴里,如果文章還處于草稿狀態(tài)或者不方便對(duì)外公開(kāi),可選擇私密保存上真,不對(duì)外公開(kāi)咬腋,在此頁(yè)可查詢用戶自己的私密文章
- 收到的贊: 作者可在此處查看自己被點(diǎn)贊的文章
- 收到的評(píng)論: 作者可在此處查看自己收到評(píng)論
- 你的贊: 作者可在此處查看自己點(diǎn)贊的文章
- 你的評(píng)論: 作者可在此處查看自己評(píng)論的文章
使用 Flask 的開(kāi)發(fā)個(gè)站的感受
盡管在開(kāi)發(fā)之前根竿,已經(jīng)做了一些調(diào)研寇壳,但是在實(shí)際開(kāi)發(fā)中壳炎,還是遇到了許多問(wèn)題。當(dāng)然撒汉,這肯定是必然的睬辐,遇到問(wèn)題能解決即可。但是這其中最大的問(wèn)題是 flask 相關(guān)擴(kuò)展的文檔問(wèn)題锨用。
flask 相關(guān)擴(kuò)展的文檔碎片化太嚴(yán)重(之前只關(guān)注了 flask 本身的文檔啄巧,其擴(kuò)展未關(guān)注)秩仆,flask 本身只是提供了一個(gè)服務(wù)器功能噪珊,類似于發(fā)送郵件使用的 flask-mail 擴(kuò)展等都需要自己額外集成。先不說(shuō)這些擴(kuò)展的質(zhì)量如何铅搓,就這些擴(kuò)展的使用文檔有的也不是很全星掰,對(duì)于站主這種新手來(lái)說(shuō),使用時(shí)仍然有疑問(wèn)播玖。
開(kāi)發(fā)整個(gè)搏站,從疫情延遲復(fù)工開(kāi)始果覆,到復(fù)工后正式上班局待,靠著每天下班后抽出點(diǎn)時(shí)間編寫,總計(jì)一個(gè)月多點(diǎn)時(shí)間薛耻,算是比較拖沓的了饼齿。目前站主正在使用 django 重構(gòu)本站項(xiàng)目能颁。因?yàn)橛兄?flask 的開(kāi)發(fā)經(jīng)驗(yàn)在伙菊,所以轉(zhuǎn) django 開(kāi)發(fā)可以說(shuō)比一開(kāi)始從零開(kāi)始時(shí)要容易很多镜硕,里面很多設(shè)計(jì)理念也都很相似。并且 django 因?yàn)楦叨燃傻脑虿破剩鞣N規(guī)范和架構(gòu)都已經(jīng)規(guī)定好(站主本人在入手新技術(shù)時(shí),最想看的就是規(guī)范)咪橙,對(duì)于新手來(lái)說(shuō)應(yīng)該比較友好!
附上兩張站主的Flask項(xiàng)目結(jié)構(gòu)圖(新手所作菠剩,如有不妥之處,歡迎指正)
小建議
如果有新人也想使用 flask 或者 django 試水搏站,并且有時(shí)間的話,個(gè)人建議可以先從 flask 開(kāi)始妆艘,后使用 django 重構(gòu)批旺。因?yàn)槿绻苯由?django搏熄,作為新手心例,也許會(huì)對(duì)里面的東西產(chǎn)生很多疑惑。就如同搭積木译株,如果直接給你一個(gè)搭好的模型欠橘,再拆開(kāi)后(逆向過(guò)程)黍檩,讓你指出每塊積木的作用刽酱,你可能會(huì)有疑惑棵里。但是讓你親自一步步去搭好后(正向過(guò)程)姐呐,再去拆解模型头谜,你對(duì)每塊積木的都會(huì)有不錯(cuò)的了解截驮。
flask 開(kāi)發(fā)就像是這個(gè)正向過(guò)程(自己一步一步去集成想要的擴(kuò)展嫌拣,完善網(wǎng)站),django 開(kāi)發(fā)就像是逆向過(guò)程(django已經(jīng)幫你集成了許多常用的擴(kuò)展晕讲,你要做的就是去學(xué)習(xí)這些擴(kuò)展的使用)贸弥。走正向?qū)π率值膸椭鷷?huì)比逆向要大的多绵疲。當(dāng)然,如果是一個(gè)沒(méi)有太多時(shí)間的新手的話郁岩,就直接上 django 吧问慎,能最大程度的保證你的項(xiàng)目質(zhì)量如叼。