1. 程式人生 > >基於Flask,構建自己的Web框架

基於Flask,構建自己的Web框架

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.pyforms.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
也歡迎大家一起交流。

2368004-a5c3f1608cf87ceb.jpg 這樣學機器學習