日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一線Python運(yùn)維開發(fā)帶你秒懂Flask框架

相信曾經(jīng)糾結(jié)過這個(gè)問題:怎樣才能徹底掌握flask?

Flask是一個(gè)使用 Python 編寫的輕量級 Web 應(yīng)用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權(quán)。

Flask也被稱為 “microframework” ,因?yàn)樗褂煤唵蔚暮诵?,?extension 增加其他功能。Flask沒有默認(rèn)使用的數(shù)據(jù)庫、窗體驗(yàn)證工具。

今天我們邀請到了多年從事Python開發(fā)的不動(dòng)老師,讓他為我們帶來flask開發(fā)的一線實(shí)戰(zhàn)。

分享開始

大家好,下面現(xiàn)在開始分享flask開發(fā),先看下本次分享的內(nèi)容:

1、Flask Web框架介紹

Flask是微型web框架,框架本身十分精簡,微型并不代表其功能弱,核心代碼基于Werkzeug, Jinja 2 這兩個(gè)庫,它以插件形式的進(jìn)行功能擴(kuò)展,且插件易于安裝與使用,并且可以自行開發(fā)擴(kuò)展插件

與其他web框架類似,flask中請求(request),路由(route),響應(yīng)(response)構(gòu)成其完整的一個(gè)基本http流程。

2、作為入門flask框架非常易于使用

了解其基本結(jié)構(gòu)后,可以迅速進(jìn)行MVC開發(fā),或者將其當(dāng)作后端restfulApi來響應(yīng)數(shù)據(jù)。

***步:我們先來用虛擬環(huán)境安裝flask

虛擬環(huán)境,將當(dāng)前運(yùn)行環(huán)境完全與系統(tǒng)的python環(huán)境進(jìn)行隔離,這里我們使用pyenv這個(gè)庫來進(jìn)行構(gòu)建環(huán)境

以centos系統(tǒng)為例安裝虛擬環(huán)境:

1、yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel

2、curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer

| bash

配置環(huán)境變量, 在 ~/.bash_profile里增加如下內(nèi)容:

 
 
 
 
  1. export PATH="~/.pyenv/bin:$PATH“ 
  2.  
  3. eval "$(pyenv init -)" 
  4.  
  5. eval "$(pyenv virtualenv-init -)“  

第二步 :在生成虛擬環(huán)境 激活此pyenv

1、系統(tǒng)中一般自帶的python版本是python2.7.10

2、我們自行下載一個(gè)python版本是2.7.12

3、使用sohu的鏡像源:http://mirrors.sohu.com/python/

找到python版本是2.7.12的包下載到本地

為何需要使用虛擬環(huán)境? 因?yàn)樘摂M環(huán)境對于每一個(gè)python環(huán)境來說是獨(dú)立開來的,用虛擬環(huán)境可以在一臺機(jī)器上運(yùn)行多個(gè)項(xiàng)目時(shí),每個(gè)項(xiàng)目的環(huán)境是隔離,不產(chǎn)生依賴。

4、如需其他版本也可以下載對應(yīng)的版本放到~/.pyenv/cache文件夾下面(cache文件夾假如不存在,自行創(chuàng)建)

5、然后執(zhí)行 pyenv install 版本號 安裝對應(yīng)的python版本: pyenv install 2.7.12

6、安裝2.7.12版本成功后,創(chuàng)建一個(gè)目錄為完全隔離的python虛擬環(huán)境:

pyenv virtualenv 2.7.12 venv27

mkdir -pv virtu

cd virtu pyenv local venv27 cd .. cd virtu 自動(dòng)激活了venv27環(huán)境

第三步: 安裝pip

Pip是一個(gè)用來安裝python第三方庫的工具

sudo yum -y install epel-release (安裝yum包擴(kuò)展)

sudo yum –y install pip

使用阿里云的python包加速pip安裝

Pip 配置阿里云鏡像:

mkdir ~/.pip

vim ~/.pip/pip.conf, 輸入以下內(nèi)容

[global] index-url=http://mirrors.aliyun.com/pypi/simple/

trusted-host=mirrors.aliyun.com

第四步:安裝flask:

cd vnvn27 (剛才構(gòu)建的虛擬環(huán)境,切換到了一個(gè)完全虛擬環(huán)境)

Pip install flask

Pip freeze 列出當(dāng)前安裝的第三方python庫以及版本

運(yùn)行python終端,import flask,可以測試是否安裝flask成功

2.0:wsgi規(guī)范

Python使用wsgi網(wǎng)關(guān)進(jìn)行Web開發(fā),flask基于wsgi網(wǎng)關(guān),flask中實(shí)例的app,也稱之為一個(gè)wsgi 應(yīng)用

Wsgi是python中定義的一種網(wǎng)關(guān)協(xié)議規(guī)范,pep333對此的相關(guān)解釋: https://www.python.org/dev/peps/pep-0333/

from wsgiref.simple_server import make_server

wsgiref包是實(shí)現(xiàn)了wsgi標(biāo)準(zhǔn)的一個(gè)參考,我們可以用它來進(jìn)行調(diào)試,此包一般用于測試環(huán)境,不建議生產(chǎn)環(huán)境中使用。

simple_server實(shí)現(xiàn)了一個(gè)簡易的http服務(wù)器,我們可以用它來運(yùn)行一個(gè)wsgi應(yīng)用

2.1:wsgi規(guī)范2

下面示例我們可以用wsgiref這個(gè)包實(shí)現(xiàn)一個(gè)簡單的wsgi web框架來理解其工作流程:

2.2:wsgi規(guī)范3

上面的代碼中,我們使用了wsgiref包簡易的實(shí)現(xiàn)了一個(gè)wsgiweb框架,其中我們依據(jù)傳入的env中獲取到url后綴來匹配router字典中對應(yīng)的處理函數(shù)

Env參數(shù)是包含了客戶端請求的信息和服務(wù)端的環(huán)境信息,可以將其打印出來,看下其中包含的變量。

Start_response函數(shù)作為參數(shù)傳入runserver應(yīng)用中,必須要start_response(status,header)來進(jìn)行響應(yīng),它是由網(wǎng)關(guān)接口定義的函數(shù)。

在上述中可以看出,wsgi的作用是在web服務(wù)器和web應(yīng)用之間的橋梁,web服務(wù)器監(jiān)聽將客戶端請求轉(zhuǎn)發(fā)給實(shí)現(xiàn)wsgi規(guī)范接口處理,wsgi接將請求進(jìn)行中轉(zhuǎn)給上層的web應(yīng)用處理,web應(yīng)用處理完成并生成響應(yīng)返回給wsgi接口,然后web服務(wù)器將收到的響應(yīng)返回給客戶端。

2.3:一個(gè)最基本應(yīng)用

Flask框架也是依據(jù)上面的規(guī)范實(shí)現(xiàn)的web框架,我們可以看下flask源碼中對于上述的封裝,不過它做了更高層次的抽象

可以看到flask源碼中使用wsgi_app和魔術(shù)方法__call__對 上述start_respones做了封裝。

接下里用flask運(yùn)行一個(gè)hello wordl

2.4:一個(gè)最基本應(yīng)用分析

 
 
 
 
  1. /usr/bin/env python 
  2.  
  3. from Flask import flask 
  4.  
  5. app = Flask(__name__) 
  6.  
  7. @app.route('/') 
  8.  
  9. def index(): 
  10.  
  11. return ‘

    Hello World!

    ‘ 
  12.  
  13. if __name__ == '__main__': 
  14.  
  15. app.run() 
  16.  
  17. python hello.py  

2.5:最基本應(yīng)用

app = Flask(__name__) 代碼使用Flask類生成一個(gè)應(yīng)用實(shí)例

 
 
 
 
  1. @app.route('/') 
  2.  
  3. def index(): 
  4.  
  5. return ‘

    hello world

    ’  

一個(gè)http過程中請求來自客戶端,http服務(wù)器(nginx,Apache)再次將請求轉(zhuǎn)發(fā)給flask應(yīng)用實(shí)例app,@app.route(‘/)中映射了url鏈接與一個(gè)python函數(shù)的對應(yīng)關(guān)系,我們將index函數(shù)稱之為視圖函數(shù)。

比如訪問192.168.1.19

---》app.route(‘/’)

訪問192.168.1.19/blog

---》app.route(‘/blog’)

2.6:可變url

在一般業(yè)務(wù)中,url都是動(dòng)態(tài)可變的,在flask中我們這樣設(shè)置可變url

 
 
 
 
  1. @app.route(‘/hello/’) 
  2.  
  3. def hello(name): 
  4.  
  5. return ‘

    hello {}’.format(name)  

示例:

訪問192.168.1.19/hello/jack

訪問192.168.1.19/hello/rose

被尖括號抱起來的部分代表url中與python處理函數(shù)中對應(yīng)的可變部分.

常用的有以下3種,定義可變的類型

、、

2.7:可變url自定義裝換器

定義可變url,除了上述的string之外,還有以下幾種int、float、path這三種,另外flask還可以通過werkzeug中的BaseConverter類,自定義轉(zhuǎn)換器。

這里自定義一個(gè)轉(zhuǎn)換器

 
 
 
 
  1. fromwerkzeug.routing import BaseConverter 
  2.  
  3. classListConverter(BaseConverter): 
  4.  
  5. def to_python(self, value): 
  6.  
  7. return value.split('+') 
  8.  
  9. def to_url(self, values): 
  10.  
  11. return'+'.join(BaseConverter.to_url(value) for value in values)  

將自定義轉(zhuǎn)換器加入到app應(yīng)用url_map中,當(dāng)客戶端輸入?yún)?shù)時(shí),可以以,我們自行設(shè)置的分隔符做轉(zhuǎn)換

 
 
 
 
  1. app.url_map.converters['list'] = ListConverter 
  2.  
  3. @app.route('/home/') 
  4.  
  5. def home(subs): 
  6.  
  7. # 使用自定義類型 
  8.  
  9. htm = '' 
  10.  
  11. for sub in subs: 
  12.  
  13. htm += '

    {}

    '.format(sub) 
  14.  
  15. return htm  

在生產(chǎn)環(huán)境中客戶端到服務(wù)端,使用python開發(fā)應(yīng)用的一般流程是如下圖所示:

flask中的請求,請求是web開發(fā)中最重要特性之一

3.0 Flask入門:請求

 
 
 
 
  1. from flask import request 
  2.  
  3. @app.route(‘/hi’) 
  4.  
  5. def hi(): 
  6.  
  7. name = request.args.get(‘name’) 
  8.  
  9. return ‘

    hi {}

    ’.format(name)  

訪問:

192.168.1.19/hi?name=mike

flask中request對象封裝了客戶端的請求參數(shù)

我們可以嘗試將print(request.__dict__)查看請求上下文環(huán)境變量

request請求對象是flask內(nèi)部封裝的一個(gè)全局對象,這個(gè)對象是線程隔離的,必須運(yùn)行在當(dāng)前請求中的上下文,直接運(yùn)行會(huì)報(bào)錯(cuò),它通過werkzeug模塊中l(wèi)ocalproxy在localstack這種數(shù)據(jù)結(jié)構(gòu)尋找當(dāng)前請求

常見的request客戶端變量

request.args 獲取從客戶端url傳輸過來的查詢字符串

request.form 獲取從客戶端表單提交過來的信息

request.json 獲取從客戶端從請求body獲取的json字符串

request.method 獲取客戶端使用的請求方法

Request.files 獲取從客戶端請求過來的文件

3.1 Flask入門:響應(yīng)與會(huì)話

from flask import make_respones

flask中封裝了make_response作為客戶端響應(yīng),返回http頭信息、狀態(tài)碼等,resp = make_respone(‘hello’.encode()),resp.set_cookie(‘name’, ‘jack’) ,將resp作為返回,可以手動(dòng)靈活的增加了cookie

會(huì)話分為客戶端和服務(wù)端2種形式,from flask importsession 中封裝了基于客戶端的cookies,示例如下:

在app.config對象中保存了flask的默認(rèn)配置以及我們項(xiàng)目中寫入的配置變量,通常情況下flask中的一些配置如下

4.1 flask中的讀入配置

app = Flask(__name__)

app.config.from_object(‘yourapplication.default_settings’)

app.config.from_pyfile(’config.cfg’)

上面兩種都可以將配置文件加入到app應(yīng)用當(dāng)中,其中app.config.from_object()方法會(huì)尋找配置文件為類的配置

用函數(shù)封裝配置文件寫入app,這樣可以依據(jù)參數(shù)來區(qū)分開發(fā)環(huán)境與生產(chǎn)環(huán)境的配置文件。

4.2工廠方法創(chuàng)建app

什么是工廠方法?工廠方法是一種設(shè)計(jì)模式,這里使用可以簡單理解為通過一個(gè)函數(shù)來批量創(chuàng)建一個(gè)flask app對象,依據(jù)不同的參數(shù)來生成不同的app

4.3為何需要工廠方法創(chuàng)建app?

當(dāng)需要運(yùn)行app的時(shí)候,可以通過工廠方法傳遞參數(shù)來生成不同的app對象,方便的進(jìn)行測試不同的app,并且生成多個(gè)app的時(shí)候可以進(jìn)行分別進(jìn)行請求處理,流量負(fù)載等,通過以下示例說明

5.0鉤子函數(shù)

flask中鉤子函數(shù)作用是將被裝飾的函數(shù)注冊到app當(dāng)中,在不同階段執(zhí)行。

app.first_request: 在***次請求之前執(zhí)行

app.before_request: 在每次請求之前執(zhí)行,可以用它來封裝中間鍵,效果類似于django middleware

app.after_request: 在每次請求之后執(zhí)行

app.teardown_appcontext: 不管是否有異常出現(xiàn),都會(huì)在每次請求之后執(zhí)行

app.errorhandler:接受狀態(tài)碼,并且自定義返回錯(cuò)誤處理信息頁面

5.1鉤子函數(shù)before_request

5.2鉤子函數(shù)errorhandler

5.3藍(lán)圖

藍(lán)圖將應(yīng)用進(jìn)行模塊化,能夠很方便的將不同的功能和路由區(qū)分開,并且易于維護(hù),藍(lán)圖基于相同的url前綴來作區(qū)分。

功能類似的視圖函數(shù)組合在一起作為藍(lán)圖的組件,將應(yīng)用進(jìn)行分割,極大簡化了大型應(yīng)用的復(fù)雜度,藍(lán)圖要注冊到app對象中,藍(lán)圖的使用方式與app的使用方式很像

藍(lán)圖提供模板過濾器、靜態(tài)文件、模板和其它功能

5.4藍(lán)圖生成

將user這些相似的功能分成一個(gè)藍(lán)圖模塊,注意藍(lán)圖文件不能和藍(lán)圖對象同名,否則會(huì)沖突報(bào)錯(cuò)

5.5藍(lán)圖注冊

v 當(dāng)以上user實(shí)例化時(shí),必須將此注冊到app應(yīng)用中,藍(lán)圖才能生效,url_prefix為自定義添加的url后綴

6.0flask擴(kuò)展使用

v flask以插件形式開發(fā)擴(kuò)展功能,其中許多優(yōu)秀第三方插件可以直接使用,提升開發(fā)效率,常見項(xiàng)目開發(fā)用到的插件有flask_sqlachemy、flask_redis、flask_login、flask_admin等等

v 插件安裝一般使用 pip install <插件名>,即可安裝

v 以下示例flask_sqlachemy使用,flask_sqlachemy是sqlalchemy的flask插件,sqlalchemy是python界有名的工業(yè)級orm框架

6.1flask_sqlalchemy

v 實(shí)例化flask_sqlalchemy,生成db對象后續(xù)初始化到app中

6.2flask插件初始化

v 由于db對象需要讀取app應(yīng)用中配置,并且依賴app上下文工作,所以將上述db對象等擴(kuò)展插件初始化app,在每次app啟動(dòng)之前完成綁定

6.3 flask_sqlalchemy定義model

使用上述db對象,model字段繼承db.Model,在mvc中此表示model層,用來進(jìn)行數(shù)據(jù)庫表字段映射關(guān)聯(lián)以及數(shù)據(jù)寫入保存等.

6.4 flask_sqlalchemy進(jìn)行用戶驗(yàn)證

以上介紹了flask中入門開發(fā)常見的問題以及模塊使用,歡迎大家拍磚。

使用flask可以輕松開發(fā)應(yīng)用,每一種web框架都有其自身利弊,對于現(xiàn)代web開發(fā)的需求來說,微框架很適合快速迭代式開發(fā),***的理解的方法是實(shí)踐,可以依據(jù)以上對flask有一個(gè)大體理解之后進(jìn)行一個(gè)簡單的應(yīng)用開發(fā)。


分享名稱:一線Python運(yùn)維開發(fā)帶你秒懂Flask框架
本文來源:http://www.dlmjj.cn/article/dhpppsg.html