1. 程式人生 > >Flask 框架 - 檢視及路由 - 1

Flask 框架 - 檢視及路由 - 1

1 學習目標

  1. 能夠根據步驟安裝虛擬環境

  2. 能夠建立 Py2 和 Py3 版本的虛擬環境

  3. 能夠使用 pip 命令安裝指定版本 Flask 及其他擴充套件

  4. 能夠寫出 Flask 從物件中載入配置的程式碼

2 Flask簡介

2.1 Web應用程式的本質

Web(World Wide Web)誕生最初的目的,是為了利用網際網路交流工作文件。

Web應用程式的本質

Web應用程式互動流程

 2.2 Web框架

Web框架是協助開發者快速開發 Web 應用程式的一套功能程式碼,開發者只需要按照框架約定要求,在指定位置寫上自己的業務邏輯程式碼

例如:在某個區需要成立一家醫院,有兩種方式:

1.圈地,打地基,蓋樓,裝修,入駐

2.買樓,裝修,入駐

為什麼要用Web框架?

web網站發展至今,特別是伺服器端,涉及到的知識、內容,非常廣泛。這對程式設計師的要求會越來越高。如果採用成熟,穩健的框架,那麼一些基礎的工作,比如,安全性,資料流控制等都可以讓框架來處理,那麼程式開發人員可以把精力放在具體的業務邏輯上面。

使用框架的優點:

  • 穩定性和可擴充套件性強
  • 可以降低開發難度,提高開發效率。

總結一句話:避免重複造輪子

Python 中常用的 Web 框架有

  • flask
  • django
  • tornado

2.3 Flask

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

Flask 本身相當於一個核心,其他幾乎所有的功能都要用到擴充套件(郵件擴充套件Flask-Mail,使用者認證Flask-Login,資料庫Flask-SQLAlchemy),都需要用第三方的擴充套件來實現。比如可以用 Flask 擴充套件加入ORM、窗體驗證工具,檔案上傳、身份驗證等。Flask 沒有預設使用的資料庫,你可以選擇 MySQL,也可以用 NoSQL。

其 WSGI 工具箱採用

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

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:簡單而可擴充套件的管理介面的框架

擴充套件列表:http://flask.pocoo.org/extensions/

  1. 中文文件(http://docs.jinkan.org/docs/flask/
  2. 英文文件(http://flask.pocoo.org/docs/0.11/

3 虛擬環境

虛擬環境:python環境的複製。

3.1 為什麼要搭建虛擬環境?

在開發過程中,當需要使用 python 的某些工具包/框架時需要聯網安裝

比如聯網安裝Flask框架flask-0.10.1版本

sudo pip install flask==0.10.1
  • 提示:使用如上命令, 會將 flask-0.10.1 安裝到 /usr/local/lib/python2.7/dist-packages 路徑下
  • 問題:如果在一臺電腦上,想開發多個不同的專案,需要用到同一個包的不同版本,如果使用上面的命令,在同一個目錄下安裝或者更新,新版本會覆蓋以前的版本,其它的專案就無法運行了。
  • 解決方案:虛擬環境

    • 作用虛擬環境可以搭建獨立的 python 執行環境, 使得單個專案的執行環境與其它專案互不影響.

    • 所有的虛擬環境都位於/home/下的隱藏目錄.virtualenvs

一個python環境中(python2.7),安裝某個包,只能安裝這個包的一個版本(新版本會覆蓋以前的版本)。

3.2 虛擬環境的搭建

前提:保證Ubuntu聯網(能夠ping通www.baidu.com即可)

1.以管理員身份執行如下命令:

sudo pip install virtualenv

sudo pip install virtualenv

2.以管理員身份執行如下命令:

sudo pip install virtualenvwrapper

sudo pip install virtualenvwrapper

3.執行命令:mkvirtualenv  提示未找到命令,進入第4步

4.在Home家目錄執行如下指令:mkdir .virtualenvs

建立好之後去修改.bashrc檔案:vim .bashrc

在最後新增如下配置程式碼,如下圖所示:

if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then

    export WORKON_HOME=$HOME/.virtualenvs

    export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

    source /usr/local/bin/virtualenvwrapper.sh

fi

然後重新載入,執行:source .bashrc

那麼將來建立的虛擬環境預設都是Python3了

3.3 測試建立虛擬環境:

預設就是建立的Python3的虛擬環境:mkvirtualenv py3_flask

也可以通過-p指定Python版本:mkvirtualenv -p python3 py3_flask2

如果想建立Python2版本的環境,使用如下命令:

執行workon命令敲回車,就可以看到所有的虛擬環境了

進入到某一個環境,執行命令:workon py3_flask就選中了當前的這個虛擬環境

安裝flask,先選中虛擬環境,然後執行如下命令:pip install flask==0.10.1命令

檢視虛擬環境中安裝的包: pip freeze

使用虛擬環境總結:

# 建立的Python3的虛擬環境:
mkvirtualenv py3_flask

# 刪除虛擬環境的命令 :
rmvirtualenv 虛擬環境名稱

# 選中當前的這個虛擬環境:
workon py3_flask

# 安裝flask:
pip install flask==0.10.1

# 檢視虛擬環境的命令:
workon 兩次tab鍵

# 使用虛擬環境的命令:
workon 虛擬環境名稱

# 退出虛擬環境的命令:
deactivate

# python3版本下安裝flask-0.10.1的包:
pip install 包名稱

# 檢視虛擬環境中安裝的包:
pip freeze

4 HelloWorld程式

4.1 建立 Python 專案

開啟 Pycharm,建立 Pure Python 型別的專案,建立專案完成之後選擇之前建立的 py3_flask 作為虛擬環境

友情提示:第 4 步路徑可以通過在指定虛擬環境下,輸入 which python 獲得

4.2 示例

新建檔案 helloworld.py

  • 匯入Flask類
from flask import Flask
  • Flask函式接收一個引數__name__,它會指向程式所在的包
app = Flask(__name__)
  • 裝飾器的作用是將路由對映到檢視函式 index
@app.route('/')
def index():
    return 'Hello World'
  • Flask應用程式例項的 run 方法 啟動 WEB 伺服器
if __name__ == '__main__':
    app.run()
  • HelloWorld 整體編寫

5 相關配置引數

在上一節實現了一個最簡單的 Flask 應用程式,只使用了7行(最基本的)程式碼,接來對 Flask 程式的建立,執行配置做進一步的瞭解,具體有:

  • Flask 程式初始化引數
  • Flask 程式相關配置載入方式
  • app.run() 引數

5.1 初始化引數

Flask 程式例項在建立的時候,需要預設傳入當前 Flask 程式所指定的包(模組),接下來就來詳細檢視一下 Flask 應用程式在建立的時候一些需要我們關注的引數:

import_name

 

  • Flask程式所在的包(模組),傳 __name__ 就可以
  • 其可以決定 Flask 在訪問靜態檔案時查詢的路徑

 

static_path

  • 靜態檔案訪問路徑(不推薦使用,使用 static_url_path 代替)

static_url_path

  • 靜態檔案訪問路徑,可以不傳,預設為:/ + static_folder

static_folder

  • 靜態檔案儲存的資料夾,可以不傳,預設為 static

template_folder

  • 模板檔案儲存的資料夾,可以不傳,預設為 templates

5.2 程式載入配置

在 Flask 程式執行的時候,可以給 Flask 設定相關配置,比如:配置 Debug 模式,配置資料庫連線地址等等,設定 Flask 配置有以下三種方式:

1.從配置物件中載入(常用)

app.config.form_object()

2.從配置檔案中載入

app.config.form_pyfile()

3.從環境變數中載入(瞭解)

app.config.from_envvar()

以下演練以設定應用程式的 DEBUG(除錯模式) 為例,設定應用為調式模式這後,可以實現以下功能:

  1. 程式程式碼修改後可以自動重啟伺服器
  2. 在伺服器出現相關錯誤的時候可以直接將錯誤資訊進行丟擲到控制檯列印

5.3 使用方式

5.3.1 配置物件

從配置物件中載入,建立配置的類,程式碼如下:

# 配置物件,裡面定義需要給 APP 新增的一系列配置
class Config(object):
    DEBUG = True


# 建立 Flask 類的物件,指向程式所在的包的名稱
app = Flask(__name__)

# 從配置物件中載入配置
app.config.from_object(Config)

執行測試,在修改程式碼之後直接儲存,會自動重啟伺服器

5.3.2 配置檔案

建立配置檔案 config.ini,在配置檔案中新增配置

使用程式碼去載入配置

# 建立 Flask 類的物件,指向程式所在的包的名稱
app = Flask(__name__)

# 從配置檔案中載入配置
app.config.from_pyfile("config.ini")

5.3.3 環境變數(瞭解)

編輯執行的相關配置

config.ini路徑如何copy.如下

使用程式碼去載入配置

# 建立 Flask 類的物件,指向程式所在的包的名稱
app = Flask(__name__)
# 載入指定環境變數名稱所對應的相關配置
app.config.from_envvar('FLASKCONFIG')

5.4 直接設定配置

5.5 讀取配置

  • app.config.get()
  • 在檢視函式中使用 current_app.config.get()

注:Flask 應用程式將一些常用的配置設定成了應用程式物件的屬性,也可以通過屬性直接設定/獲取某些配置:app.debug = True

5.6 app.run的引數

可以指定執行的主機IP地址,埠,是否開啟除錯模式

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

注:此時 127.0.0.1 IP地址就不能用了

解決方案:可以配置一個萬能ip:0.0.0.0

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