欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何理解Python運(yùn)維開發(fā)中的Flask框架

如何理解Python運(yùn)維開發(fā)中的Flask框架,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比安岳網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式安岳網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋安岳地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

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

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

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

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

分享開始

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

1、Flask Web框架介紹

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

與其他web框架類似,flask中請(qǐng)求(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)容:

export PATH="~/.pyenv/bin:$PATH“  eval "$(pyenv init -)"  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)境對(duì)于每一個(gè)python環(huán)境來說是獨(dú)立開來的,用虛擬環(huán)境可以在一臺(tái)機(jī)器上運(yùn)行多個(gè)項(xiàng)目時(shí),每個(gè)項(xiàng)目的環(huán)境是隔離,不產(chǎn)生依賴。

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

5、然后執(zhí)行 pyenv install 版本號(hào) 安裝對(duì)應(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,可以測(cè)試是否安裝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對(duì)此的相關(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)試,此包一般用于測(cè)試環(huán)境,不建議生產(chǎn)環(huán)境中使用。

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

2.1:wsgi規(guī)范2

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

2.2:wsgi規(guī)范3

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

Env參數(shù)是包含了客戶端請(qǐng)求的信息和服務(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)聽將客戶端請(qǐng)求轉(zhuǎn)發(fā)給實(shí)現(xiàn)wsgi規(guī)范接口處理,wsgi接將請(qǐng)求進(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源碼中對(duì)于上述的封裝,不過它做了更高層次的抽象

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

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

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

/usr/bin/env python  from Flask import flask  app = Flask(__name__)  @app.route('/')  def index():  return &lsquo;<h2>Hello World!</h2>&lsquo;  if __name__ == '__main__':  app.run()  python hello.py

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

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

@app.route('/')  def index():  return &lsquo;<h2>hello world</h2>&rsquo;

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

比如訪問192.168.1.19

---》app.route(&lsquo;/&rsquo;)

訪問192.168.1.19/blog

---》app.route(&lsquo;/blog&rsquo;)

2.6:可變url

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

@app.route(&lsquo;/hello/<name>&rsquo;)  def hello(name):  return &lsquo;<h2>hello {}&rsquo;.format(name)

示例:

訪問192.168.1.19/hello/jack

訪問192.168.1.19/hello/rose

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

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

<string:name>、<int:uid>、<path:prefix>

2.7:可變url自定義裝換器

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

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

fromwerkzeug.routing import BaseConverter  classListConverter(BaseConverter):  def to_python(self, value):  return value.split('+')  def to_url(self, values):  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)換

app.url_map.converters['list'] = ListConverter  @app.route('/home/<list:subs>')  def home(subs):  # 使用自定義類型  htm = ''  for sub in subs:  htm += '<h2>{}</h2>'.format(sub)  return htm

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

3.0 Flask入門:請(qǐng)求

from flask import request  @app.route(&lsquo;/hi&rsquo;)  def hi():  name = request.args.get(&lsquo;name&rsquo;)  return &lsquo;<h2>hi {}</h2>&rsquo;.format(name)

訪問:

192.168.1.19/hi?name=mike

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

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

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

常見的request客戶端變量

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

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

request.json 獲取從客戶端從請(qǐng)求body獲取的json字符串

request.method 獲取客戶端使用的請(qǐng)求方法

Request.files 獲取從客戶端請(qǐng)求過來的文件

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

from flask import make_respones

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

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

4.1 flask中的讀入配置

app = Flask(__name__)

app.config.from_object(&lsquo;yourapplication.default_settings&rsquo;)

app.config.from_pyfile(&rsquo;config.cfg&rsquo;)

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

5.0鉤子函數(shù)

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

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

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

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

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

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

5.1鉤子函數(shù)before_request

如何理解Python運(yùn)維開發(fā)中的Flask框架

5.2鉤子函數(shù)errorhandler

如何理解Python運(yùn)維開發(fā)中的Flask框架

5.3藍(lán)圖

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

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

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

5.4藍(lán)圖生成

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

5.5藍(lán)圖注冊(cè)

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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è)級(jí)orm框架

6.1flask_sqlalchemy

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

6.2flask插件初始化

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

6.3 flask_sqlalchemy定義model

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

如何理解Python運(yùn)維開發(fā)中的Flask框架

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

關(guān)于如何理解Python運(yùn)維開發(fā)中的Flask框架問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

標(biāo)題名稱:如何理解Python運(yùn)維開發(fā)中的Flask框架
標(biāo)題來源:http://chinadenli.net/article44/gshphe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)自適應(yīng)網(wǎng)站網(wǎng)站設(shè)計(jì)公司Google外貿(mào)建站網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)