基於Flask,構建自己的Web框架
阿新 • • 發佈:2019-02-02
Flask是一個使用Python編寫的輕量級Web應用框架,因為它強大的自由性,從推出開始就受到大家的熱捧,在官方文件和其他介紹Flask的文章中,你一定沒少看到下面的程式碼
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
簡單的幾行就獲得了一個可執行的web應用,這讓新手入門變得非常簡單。但是,隨著系統複雜度的上升,單個檔案已經無法滿足需求,於是出現了所謂的大型應用架構:
|-flasky
|-app/
|-templates/
|-static/
|-main/
|-__init__.py
|-errors.py
|-forms.py
|-views.py
|-__init__.py
|-email.py
|-models.py
|-migrations/
|-tests/
|-__init__.py
|-test*.py
|-venv/
|-requirements.txt
對於不是特別複雜的系統,可以採用如上的模式開發,但實際情況是,我們通常所面對的業務要複雜的多,這樣就無法把所有模型都放在同一個models.py
views.py
、forms.py
也是如此。除了程式碼結構,還有其他的一些因素需要考慮,例如:如何記錄日誌,如何處理錯誤資訊等等,只要我們使用Flask,就不得不一遍遍的去做這樣的事情。對於一個框架來說,開發人員應該不用去關注框架本身,而是將精力全部集中到業務實現。因此,我決定基於Flask來封裝自己的web框架(Github),而這個框架在很大程度上參考了How I Structure My Flask Applications 這篇部落格。
封裝後的Web框架的結構如下:
. ├── README.md ├── app │ ├── __init__.py │ ├── controllers │ ├── forms │ ├── models │ ├── services │ ├── core.py │ ├── exceptions.py │ ├── extensions.py │ └── factory.py ├── config │ ├── __init__.py │ ├── settings.dev.py │ ├── settings.pro.py │ └── settings.py ├── logs │ └── dev.log ├── manage.py ├── public ├── requirements │ ├── dev.txt │ └── pro.txt ├── utils └── venv
之所以這樣安排目錄結構,是考慮到有些同學可能是從PHP或Java轉移過來的,他們還是比較熟悉按層來劃分模組,而不是根據功能來劃分。在使用的時候,只需要在對應的模組中新增業務程式碼,真正做到了開箱即用。更詳細的資訊大家看程式碼吧,地址如下:
https://github.com/iszhenyu/fiji
也歡迎大家一起交流。