Flask web專案(部署後) –個人總結

Flask web專案(部署後) –個人總結

水文一篇,不喜勿擾。歡迎轉載!

 

    耗時三個月,總算把論壇項專案完成了,web專案開發之路就暫告一段了,這個做一個小小的總結。

歡迎大家來訪問:www.benmoom.club

 

一、廣告寫在前

    本人網路小白出身,歷時三個月的學習讓我瞭解了不少網路相關的基礎知識,這裡十分感激知了課堂的Flask教程。

從前端HTML、CSS、JS,到後端邏輯設計,然後利用Flask框架完成整個Web專案的開發。本地開發完了,才能傳到伺服器部署。讓我對於整個開發流程有個大概的瞭解。我覺得通過這個課程get到的技能有:

 

  • flask框架的使用
  • 瞭解web前端開發,學會使用第三方前端模板
  • 掌握python後端設計思路
  • Mysql簡單使用
  • 使用git提交專案
  • 伺服器部署

 

如果你有興趣的話可以選擇報一個,基礎課程是免費的,另有進階課程。學習門檻還是很低的,有python基礎最好,由於我的初衷就是開發一個簡簡單單的論壇,涉及原理部分沒有深究。現在學到的比我想象的要多,很驚喜也意外!

關於課程,我覺得老師講的還是蠻細緻的,很實用,起碼用到的部分講的很細。課程是錄製的可以反覆的看。課後筆記文件也很細緻。

關於老師,謝謝黃勇老師很耐心的指導。遇到一些卡頓的地方,有一個老師確實指點確實比自己上網查詢琢磨效率高的多~

如果你有興趣的話,可以先看看免費的基礎課。

Python Flask系列(1)——基礎:http://study.163.com/course/courseMain.htm?courseId=1004091002

Python Flask框架——全棧開發: http://study.163.com/course/courseMain.htm?courseId=1004507006

 

 

二、總結

個人對flask web專案開發過程的一些記錄。個人理解成分比較多些,難免有錯誤的地方。有任何錯誤還望指出,歡迎批評!

 

1.專案檔案架構

首先,按照前後端分離的思想。大致把專案分成前端、後端、程式碼、其他四個部分

templates:前端部分,用於存放html模板檔案

static:前端部分,主要是一些圖文資源和css、js靜態檔案,用來渲染模板的

apps:後端部分,python flask寫的,程式碼部分用來處理前後端的連線、後端邏輯功能實現、資料庫互動類似操作

其他:配置檔案config、主app指令碼檔案demo.py、遷移檔案migrate、第三方工具utils等等…

 

按照功能可以將各個資料夾裡面的檔案再分成前臺處理front、後臺cms、和共用部分common。

 

 

2.cms後臺設計

 

2.1使用者登入功能的實現

1.連線資料庫mysql,先是將cms介面佈局初步設計出來後,通過配置檔案config.py給資料庫連線用到的環境變數賦值,然後註冊到主app中。就可以了。

2.ORM對映讓我們可以直接操作ORM模型來對Mysql資料庫進行增刪改查的基本操作。

3.通過命令的形式(manage.py),在終端來為資料庫新增一位cms使用者。

3.回到前端部分,通過bootstrap模板引擎,來渲染html模板。讓介面更加美觀。

4.因為第一個是要實現登入功能,具體流程是

使用者填寫表單 ->使用者點選按鈕 ->瀏覽器上傳表單 ->伺服器拿到表單進行相關驗證 ->儲存到資料庫or快取機制->將結果返回前端 ->前端拿到結果再進行操作

要實現前後端的聯動,涉及到的還比較多,不過基本上都是基礎課裡接觸過了的。我認為重點和難點還是在資料的儲存方面。

5.由於網路請求是沒有狀態的,也就是說每次請求之間沒有任何關聯。下一次的請求也不會記住上衣次請求的結果。所以當使用者登入成功時,需要使用者短期記住的一個機制,也就是上下文變數。

6.要想瀏覽器長期記住本地使用者的身份,需要在伺服器上設定session值,瀏覽器本地儲存的是cookie值。

以上是我對於使用者登入環節的理解,註冊、新增使用者屬性等操作與登入類似!

 

2.2關於前端模型

對於html的深入理解,方便之後做專案時進行模板移植操作!!我看來,html是一堆標籤的組合,如何利用這些標籤構造好一個前端模型才是重點。筆者還沒有對html有深入的理解,但是拿別人的模板來改的時候,感覺這些基礎知識還是蠻重要的!

1.通過巨集來替換一些經常重複出現的程式碼片段

2.block塊的操作,將一些固定的結構抽離出來。那個模板需要用到的話就block插進去,還可以原有塊的基礎上再進行構造,這點類似python的類繼承。比如,一個base.html規定一些板塊(用到block操作),其他頁面再這個基礎上再構造就可以了。

3.div標籤是個好東西。

 

2.3網站安全方面也下了不少功夫

1.session資訊“加鹽”處理,防止別人偽造使用者資訊

2.新增csrf-tooken機制,防止黑客偽造表單

3.使用者密碼當然也進行了演算法加密處理

 

2.4JS、CSS的學習

講真的,這個課程對JS、CSS的講解真的不多,但也讓人有個基本的瞭解。對於移植別人的程式碼這樣方便的操作,我想是夠了。

我對這兩者的理解僅限於:CSS 渲染介面、美化介面用的  JS 讓介面實現一些動態效果(有時Jquery提交表單的時候就是與後端對接了)

 

2.5還有好多第三方元件的使用

不講了,瞭解不多。基本靠移植原始碼過來的。其中包括但不限於 AJAX懶載入、文字/圖形驗證碼生成、郵箱傳送驗證碼、短息驗證碼、七牛雲端儲存圖片、編輯器整合……

 

3.前臺部分涉及功能比較多,資料處理起來也比較複雜些。但也類似!

 

4.部署環節

Flask nginx uwsgi superbvisor 部署與管理方案

遇到的坑比較多些,還好老師夠熱情,有些問題講不明白就幫我遠端解決了。

其中有一個坑比較厲害,

 

問題細節:https://www.v2ex.com/t/463088#reply2

 

描述:訪問瀏覽器總是彈出Internal Server Error,顯然是內部錯誤。可我本地除錯沒問題啊

檢視輸出日誌:python application found, check your startup logs for errors     。。。。。。

網上查詢無果,,最後檢查發現問題的根源出在這個地方:

if __name__ == '__main__': 
app = create_app() 
app.run()

乍一看沒什麼問題,這樣寫當然在本地執行也沒啥問題。但是在服務上就會報錯 python application found, check your startup logs for errors。這是因為在專案上線後,通過 uwsgi 伺服器,給專案做一些非靜態的處理,部分配置 
wsgi-file = /srv/webtest/demo.py 

 

callable = app

 

修改如下:

app = create_app() 
if __name__ == '__main__': 
app.run()

問題解決!

 

 

三、定位

總之,筆者出發點就是搭建一個簡簡單單的論壇。涉及不深,但現在目的已經實現了,我想也是說要告一段落的時候了。以後想來也不會有遺憾。還在這條路上前行的同學們,願你們的道路越走越遠!