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、中文文件(http://docs.jinkan.org/docs/flask/)
2、英文文件(http://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 在訪問靜態檔案時查詢的路徑
- 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除錯模式
- 程式程式碼修改後可以自動重啟伺服器
- 在伺服器出現相關錯誤的時候可以直接將錯誤資訊返回到前端進行展示