Flask框架(一):介紹與環境搭建

  • 2020 年 7 月 26 日
  • 筆記

1.Flask介紹

Flask誕生於2010年,是Armin ronacher(人名)用 Python 語言基於 Werkzeug 工具箱編寫的輕量級Web開發框架。

 

Flask 本身相當於一個內核,其他幾乎所有的功能都要用到擴展(郵件擴展Flask-Mail,用戶認證Flask-Login,資料庫Flask-SQLAlchemy),

都需要用第三方的擴展來實現。比如可以用 Flask 擴展加入ORM、窗體驗證工具,文件上傳、身份驗證等。Flask 沒有默認使用的資料庫,你可以選擇 MySQL,也可以用 NoSQL。

 

其 WSGI 工具箱採用 Werkzeug(路由模組),模板引擎則使用 Jinja2。這兩個也是 Flask 框架的核心。

2.Flask與Django對比

django提供了:django-admin快速創建項目工程目錄、manage.py 管理項目工程、orm模型(資料庫抽象層)、admin後台管理站點、快取機制、文件存儲系統、用戶認證系統

flask都沒有,都需要擴展包來提供

重量級的框架:為方便業務程式的開發,提供了豐富的工具、組件,如Django

輕量級的框架:只提供Web框架的核心功能,自由、靈活、高度訂製,如Flask、Tornado

3.Flask常用的擴展包

  • Flask-SQLalchemy:操作資料庫;
  • Flask-script:插入腳本;
  • Flask-migrate:管理遷移資料庫;
  • Flask-Session:Session存儲方式指定;
  • Flask-WTF:表單;
  • Flask-Mail:郵件;
  • Flask-Bable:提供國際化和本地化支援,翻譯;
  • Flask-Login:認證用戶狀態;
  • Flask-OpenID:認證;
  • Flask-RESTful:開發REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和時間;
  • Flask-Admin:簡單而可擴展的管理介面的框架

4.Flask文檔

1、中文文檔(//docs.jinkan.org/docs/flask/

2、英文文檔(//flask.pocoo.org/docs/1.0/

5.Flask安裝

pip install flask  # 可以先創建虛擬環境再進行安裝

6.Flask程式編寫

創建helloworld.py文件

# 導入Flask類
from flask import Flask

#Flask類接收一個參數__name__,Flask通過__name__找到程式所在的根目錄
app = Flask(__name__)  #type:Flask

# 裝飾器的作用是將路由映射到視圖函數index
@app.route('/')
def index():
    return 'Hello World'

# Flask應用程式實例的run方法啟動WEB伺服器
if __name__ == '__main__':
    app.run()

7.參數說明

Flask 程式實例在創建的時候,需要默認傳入當前 Flask 程式所指定的包(模組),接下來就來詳細查看一下 Flask 應用程式在創建的時候一些需要我們關注的參數:

  • import_name
    • Flask程式所在的包(模組),傳 __name__ 就可以
    • 其可以決定 Flask 在訪問靜態文件時查找的路徑
  • static_url_path
    • 靜態文件訪問路徑,可以不傳,默認為:/ + static_folder
  • static_foldertemplate_folder
    • 靜態文件存儲的文件夾,可以不傳,默認為 static
    • 模板文件存儲的文件夾,可以不傳,默認為 templates

默認參數情況下

app = Flask(__name__)

文件目錄

----
  |---static
  |     |--- 1.png
  |---helloworld.py

訪問 127.0.0.1:5000/static/1.png 就可以訪問到圖片

修改參數的情況下

app = Flask(__name__, static_url_path='/url_path_param', static_folder='folder_param')

文件目錄

----
  |---folder_param     # 此處目錄名變化
  |     |--- 1.png
  |---helloworld.py

訪問127.0.0.1:5000/url_path_param/1.png才可以訪問到圖片

8.應用程式配置參數

主要使用以下三種方式:

  • 從配置對象中載入

    app.config.from_object(配置對象)
    
    class DefaultConfig(object):
        """默認配置"""
        SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'
    
    app = Flask(__name__)
    
    app.config.from_object(DefaultConfig)
    
    @app.route("/")
    def index():
        print(app.config['SECRET_KEY'])
        return "hello world"

    應用場景:

    作為默認配置寫在程式程式碼中

    可以繼承

    class DevelopmentConfig(DefaultConfig):
        DEBUG=True
  • 從配置文件中載入

    app.config.from_pyfile(配置文件)

    新建一個配置文件setting.py

    SECRET_KEY = 'TPmi4aLWRbyVq8zu9v82dWYW1'

    在Flask程式文件中

    app = Flask(__name__)
    
    app.config.from_pyfile('setting.py')
    
    @app.route("/")
    def index():
        print(app.config['SECRET_KEY'])
        return "hello world"

    應用場景:

    在項目中使用固定的配置文件

  • 從環境變數中載入

    環境變數(environment variables)一般是指在作業系統中用來指定作業系統運行環境的一些參數,如:臨時文件夾位置和系統文件夾位置等。 環境變數是在作業系統中一個具有特定名字的對象,它包含了一個或者多個應用程式所將使用到的資訊。

    通俗的理解,環境變數就是我們設置在作業系統中,由作業系統代為保存的變數值

    在Linux系統中設置和讀取環境變數的方式如下:

    export 變數名=變數值  # 設置
    echo $變數名  # 讀取
    
    # 例如
    export ITCAST=python
    echo $ITCAST

    Flask使用環境變數載入配置的本質是通過環境變數值找到配置文件,再讀取配置文件的資訊,其使用方式為

    app.config.from_envvar('環境變數名')

    環境變數的值為配置文件的絕對路徑

    先在終端中執行如下命令

    export PROJECT_SETTING='~/setting.py'

    再運行如下程式碼  

app = Flask(__name__)

app.config.from_envvar('PROJECT_SETTING', silent=True)

@app.route("/")
def index():
    print(app.config['SECRET_KEY'])
    return "hello world"

關於silent的說明:

 表示系統環境變數中沒有設置相應值時是否拋出異常

    • False 表示不安靜的處理,沒有值時報錯通知,默認為False
    • True 表示安靜的處理,即時沒有值也讓Flask正常的運行下去

項目中的常用方式

使用工廠模式創建Flask app,並結合使用配置對象與環境變數載入配置

  • 使用配置對象載入默認配置
  • 使用環境變數載入不想出現在程式碼中的敏感配置資訊
def create_flask_app(className):
    """
    創建Flask應用
    :param config: 配置對象
    :return: Flask應用
    """
    app = Flask(__name__)
    app.config.from_object(className)

    # 從環境變數指向的配置文件中讀取的配置資訊會覆蓋掉從配置對象中載入的同名參數
    app.config.from_envvar("PROJECT_SETTING", silent=True)
    return app

class DefaultConfig(object):
    """默認配置"""
    SECRET_KEY = 'itcast1'

class DevelopmentConfig(DefaultConfig):
    DEBUG=True

# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)

@app.route("/")
def index():
    print(app.config['SECRET_KEY'])
    return "hello world"

app.run 參數

可以指定運行的主機IP地址,埠,是否開啟調試模式

app.run(host="0.0.0.0", port=5000, debug = True)

關於DEBUG調試模式

  1. 程式程式碼修改後可以自動重啟伺服器
  2. 在伺服器出現相關錯誤的時候可以直接將錯誤資訊返回到前端進行展示