Flask概念及基礎
- 為什么要用Web框架
- Web應用程式的本質
- 使用WEB框架的優點
- Flask簡介:
- Flask與Django對比
- 框架之間的差別
- Flask 安裝環境
- 1、創建目錄用來存放虛擬環境
- 2、打開~/.bashrc檔案,并添加如下:
- 3、運行
- 4、進入虛擬環境
- 5、退出虛擬環境
- 安裝Flask
- requirements 檔案
- 從 Hello World 開始
- Flask程式運行程序
- 示例:
- 路由定義的基本方式
- 請求方式限定
- 給路由傳參示例
為什么要用Web框架
Web應用程式的本質
Web(World Wide Web)誕生最初的目的,是為了利用互聯網交流作業檔案,

使用WEB框架的優點
web網站發展至今,特別是服務器端,涉及到的知識、內容,非常廣泛,這對程式員的要求會越來越高,如果采用成熟,穩健的框架,那么一些基礎的作業,比如,安全性,資料流控制等都可以讓框架來處理,那么程式開發人員可以把精力放在具體的業務邏輯上面,使用框架的優點:
穩定性和可擴展性強
可以降低開發難度,提高開發效率,
總結一句話:避免重復造輪子

Flask簡介:
Flask誕生于2010年,是用Python語言基于Werkzeug工具箱撰寫的輕量級Web開發框架,
Flask本身相當于一個內核,其他幾乎所有的功能都要用到擴展(郵件擴展Flask-Mail,用戶認證Flask-Login),都需要用第三方的擴展來實作,
其 WSGI 工具箱采用 Werkzeug(路由模塊),模板引擎則使用 Jinja2,這兩個也是Flask框架的核心,
Python最出名的框架要數Django,此外還有Flask、Tornado等框架,雖然Flask不是最出名的框架,但是Flask應該算是最靈活的框架之一,這也是Flask受到廣大開發者喜愛的原因,
Flask常用擴展包:
Flask-SQLalchemy:操作資料庫;
Flask-migrate:管理遷移資料庫;
Flask-Mail:郵件;
Flask-WTF:表單;
Flask-Bable:提供國際化和本地化支持,翻譯;
Flask-script:插入腳本;
Flask-Login:認證用戶狀態;
Flask-OpenID:認證;
Flask-RESTful:開發REST API的工具;
Flask-Bootstrap:集成前端Twitter Bootstrap框架;
Flask-Moment:本地化日期和時間;
Flask-Admin:簡單而可擴展的管理介面的框架
擴展串列:http://flask.pocoo.org/extensions/
中文檔案(http://docs.jinkan.org/docs/flask/)
英文檔案(http://flask.pocoo.org/docs/0.12/)
Flask與Django對比
Django vs Flask

Flask

框架之間的差別
- Django功能大而全,Flask只包含基本的配置
Django的一站式解決的思路,能讓開發者不用在開發之前就在選擇應用的基礎設施上花費大量時間,Django有模板,表單,路由,認證,基本的資料庫管理等等內建功能,與之相反,Flask只是一個內核,默認依賴于兩個外部庫: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以擴展的形式進行嵌入使用, - Flask 比 Django 更靈活
Flask 在 Django 之后發布,現階段有大量的插件和擴展滿足不同需要
Django發布于2005年,Flask創始于2010年年中,
Flask 安裝環境
使用虛擬環境安裝Flask,可以避免包的混亂和版本的沖突,虛擬環境是Python解釋器的副本,在虛擬環境中你可以安裝擴展包,為每個程式單獨創建的虛擬環境,可以保證程式只能訪問虛擬環境中的包,而不會影響系統中安裝的全域Python解釋器,從而保證全域解釋器的整潔,
虛擬環境使用virtualenv創建,可以查看系統是否安裝了virtualenv:
$ virtualenv --version
安裝虛擬環境
$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper
創建虛擬環境(須在聯網狀態下)
$ mkvirtualenv Flask_py
安裝完虛擬環境后,如果提示找不到mkvirtualenv命令,須配置環境變數:
1、創建目錄用來存放虛擬環境
mkdir
$HOME/.virtualenvs
2、打開~/.bashrc檔案,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
3、運行
source ~/.bashrc
4、進入虛擬環境
$ workon Flask_py
5、退出虛擬環境
如果所在環境為真實環境,會提示deactivate:未找到命令
$ deactivate Flask_py
安裝Flask
指定Flask版本安裝
$ pip install flask == 0.10.1
pip freeze > requirements.txt
Mac系統:
$ easy_install flask == 0.10.1
在ipython中測驗安裝是否成功
$ from flask import Flask
requirements 檔案
Python 專案中必須包含一個 requirements.txt 檔案,用于記錄所有依賴包及其精確的版本號,以便在新環境中進行部署操作,
在虛擬環境使用以下命令將當前虛擬環境中的依賴包以版本號生成至檔案中:
$ pip freeze >requirements.txt
安裝或升級包后,最好更新這個檔案以保證虛擬環境中的依賴包,
需求檔案的內容示例如下:
alembic==0.9.2
blinker==1.4
click==6.7
dominate==2.3.1
Flask==0.10.1
Flask-Bootstrap==3.3.7.1
Flask-Login==0.4.0
Flask-Mail==0.9.1
Flask-Migrate==2.0.4
Flask-Redis==0.3.0
Flask-Script==2.0.5
Flask-SQLAlchemy==2.2
Flask-Testing==0.6.2
Flask-WTF==0.14.2
gunicorn==19.7.1
itsdangerous==0.24
Jinja2==2.9.6
Mako==1.0.6
MarkupSafe==1.0
MySQL-python==1.2.5
mysqlclient==1.3.10
PyMySQL==0.7.11
python-dateutil==2.6.0
python-editor==1.0.3
redis==2.10.5
six==1.10.0
SQLAlchemy==1.1.10
uWSGI==2.0.15
visitor==0.1.3
Werkzeug==0.12.2
WTForms==2.1
xmltodict==0.11.0
當需要創建這個虛擬環境的完全副本,可以創建一個新的虛擬環境,并在其上運行以下命令:
$ pip install -r requirements.txt
從 Hello World 開始
Flask程式運行程序
當客戶端想要獲取資源時,一般會通過瀏覽器發起HTTP請求,
此時,Web服務器會把來自客戶端的所有請求都交給Flask程式實體
程式實體使用Werkzeug來做路由分發(URL請求和視圖函式之間的對應關系),
根據每個URL請求,找到具體的視圖函式并進行呼叫,
在Flask程式中,路由的實作一般是通程序式實體的裝飾器實作,
Flask呼叫視圖函式后,可以回傳兩種內容:
字串內容:將視圖函式的回傳值作為回應的內容,回傳給客戶端(瀏覽器)
HTML模版內容:獲取到資料后,把資料傳入HTML模板檔案中,模板引擎負責渲染HTTP回應資料,然后回傳回應資料給客戶端(瀏覽器)
示例:
- 新建Flask專案
- 匯入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()
路由定義的基本方式
請求方式限定
使用 methods 引數指定可接受的請求方式,可以是多種
@app.route('/',methods=['GET', 'POST'])
def hello():
return 'hello world'
給路由傳參示例
有時我們需要將同一類URL映射到同一個視圖函式處理,比如:使用同一個視圖函式 來顯示不同用戶的訂單資訊,
路由傳遞的引數默認當做string處理
@app.route('/orders/<order_id>')
def hello_itheima(order_id):
# 此處的邏輯: 去查詢資料庫改用戶的訂單資訊, 并回傳
print type(order_id) # 型別為unicode
return 'hello itcast %d' % order_id
這里指定int, 會呼叫系統的路由轉換器進行匹配和轉換.
- 大致原理是將引數強轉為int, 如果成功, 則可以進行路由匹配
- 如果引數無法轉換成功, 就無法匹配該路由
@app.route('/orders/<int:order_id>')
def hello_itheima(order_id):
print type(order_id) # 型別為int
return 'hello itcast %d' % order_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292046.html
標籤:python
