Flask 入門(第三篇)

1. 安裝虛擬環境

安裝虛擬環境:python

$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper
virtualenv --version        # 檢查版本

安裝完虛擬環境後,若是提示找不到mkvirtualenv命令,須配置環境變量:web

# 一、建立目錄用來存放虛擬環境
mkdir $HOME/.virtualenvs

# 二、打開~/.bashrc文件,並添加以下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 三、運行
source ~/.bashrc

建立虛擬環境(ubuntu裏須在聯網狀態下)數據庫

$ mkvirtualenv Flask_py

進入虛擬環境flask

$ workon Flask_py

退出虛擬環境ubuntu

若是所在環境爲真實環境,會提示deactivate:未找到命令瀏覽器

$ deactivate Flask_py

2. 安裝Flask依賴包

安裝依賴包(須在虛擬環境中): 依賴就是開發以及程序運行須要使用的環境的集合。包括軟件、插件等。咱們通常會把須要使用的依賴給保存在一個文件中,命名爲requirements的txt文件。若是在其它環境中要運行咱們的項目,直接經過指令能夠一次性安裝全部依賴。bash

安裝依賴包(須在虛擬環境中):服務器

$ pip install -r requirements.txt

生成依賴包(須在虛擬環境中):session

$ pip freeze > requirements.txt

在ipython中測試安裝是否成功app

$ from flask import Flask

3. Flask 運行流程

客戶端發起 HTTP 請求,web 服務器使用 WSGI 協議未來自客戶端的請求交給 flask 實例。

WSGI 是 Python 語言定義的 web 服務器 和 web 應用程序之間的一種簡單而通用的接口,它封裝了 http 請求,解析 http 請求、發送 http 響應等這些底層代碼。

程序實例使用 Werkzeug 作路由分發,根據每一個 URL 請求,找到具體視圖函數。router 內部會調用 add_url_route() 方法來實現路由註冊。

調用視圖函數,獲取響應數據後,將數據傳入 HTML 模板文件中,模板引擎負責渲染響應數據,而後由 flask 返回響應數據給瀏覽器,最後瀏覽器將數據顯示給客戶端。

4. 拓展

4.1 上下文

上下文就像一個容器,保存 Flask 程序運行時的一些信息。Flask 中有兩種上下文:請求上下文、應用上下文。

請求上下文(request context)

requestsession 都屬於請求上下文對象

  • request:封裝 HTTP 請求內容
  • session:記錄請求會話信息,如:保存用戶信息 session['username']= user.id

應用上下文(application context)

current_appg 都屬於應用上下文對象

  • current_app:當前運行程序文件的程序實例 current_app.name 打印當前應用程序實例名字
>>> from s3 import app
>>> from flask import Flask
>>> context = app.app_context()
>>> context.push()
>>> current_app.name
's3'
  • g:處理請求時,用於臨時存儲的對象,每次請求時都會重設這個變量,通常用於獲取臨時請求的用戶信息。
    • 當調用app = Flask(name)的時候,建立了程序應用對象app;
    • request 在每次http請求發生時,WSGI server調用Flask.call();而後在Flask內部建立的request對象;
    • app的生命週期大於request和g,一個app存活期間,可能發生屢次http請求,因此就會有多個request和g。
    • 最終傳入視圖函數,經過return、redirect或render_template生成response對象,返回給客戶端。

請求上下文和應用上下文區別

  • 請求上下文:保存了客戶端和服務器交互的數據。
  • 應用上下文:在flask程序運行過程當中,保存的一些配置信息,好比程序文件名、數據庫的鏈接、用戶信息等。

4.2 Flask-Script擴展命令行

除了可使用 app.run() 傳遞參數外(能夠傳遞 host/ip等),還能夠經過 Flask-Script 拓展程序拓展命令行,從命令行傳遞這些參數:

app.py

from flask import Flask
from flask_script import Manager

app = Flask(__name__)

manager = Manager(app)

@app.route('/')
def index():
    return 'OK'

if __name__ == "__main__":
    manager.run()

經過 python app.py runserver --help 來查看能夠傳遞的參數。(前提是你要安裝好 Flask-Script

相關文章
相關標籤/搜索