成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一線Python運維開發帶你秒懂Flask框架

開發 后端
Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的數據庫、窗體驗證工具。

相信曾經糾結過這個問題:怎樣才能徹底掌握flask?

Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權。

Flask也被稱為 “microframework” ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認使用的數據庫、窗體驗證工具。

今天我們邀請到了多年從事Python開發的不動老師,讓他為我們帶來flask開發的一線實戰。

分享開始

大家好,下面現在開始分享flask開發,先看下本次分享的內容:

1、Flask Web框架介紹

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

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

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

了解其基本結構后,可以迅速進行MVC開發,或者將其當作后端restfulApi來響應數據。

***步:我們先來用虛擬環境安裝flask

虛擬環境,將當前運行環境完全與系統的python環境進行隔離,這里我們使用pyenv這個庫來進行構建環境

以centos系統為例安裝虛擬環境:

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

配置環境變量, 在 ~/.bash_profile里增加如下內容:

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

第二步 :在生成虛擬環境 激活此pyenv

1、系統中一般自帶的python版本是python2.7.10

2、我們自行下載一個python版本是2.7.12

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

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

為何需要使用虛擬環境? 因為虛擬環境對于每一個python環境來說是獨立開來的,用虛擬環境可以在一臺機器上運行多個項目時,每個項目的環境是隔離,不產生依賴。

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

5、然后執行 pyenv install 版本號 安裝對應的python版本: pyenv install 2.7.12

6、安裝2.7.12版本成功后,創建一個目錄為完全隔離的python虛擬環境:

pyenv virtualenv 2.7.12 venv27

mkdir -pv virtu

cd virtu pyenv local venv27 cd .. cd virtu 自動激活了venv27環境

第三步: 安裝pip

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

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

sudo yum –y install pip

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

Pip 配置阿里云鏡像:

mkdir ~/.pip

vim ~/.pip/pip.conf, 輸入以下內容

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

trusted-host=mirrors.aliyun.com

第四步:安裝flask:

cd vnvn27 (剛才構建的虛擬環境,切換到了一個完全虛擬環境)

Pip install flask

Pip freeze 列出當前安裝的第三方python庫以及版本

運行python終端,import flask,可以測試是否安裝flask成功

2.0:wsgi規范

Python使用wsgi網關進行Web開發,flask基于wsgi網關,flask中實例的app,也稱之為一個wsgi 應用

Wsgi是python中定義的一種網關協議規范,pep333對此的相關解釋: https://www.python.org/dev/peps/pep-0333/

from wsgiref.simple_server import make_server

wsgiref包是實現了wsgi標準的一個參考,我們可以用它來進行調試,此包一般用于測試環境,不建議生產環境中使用。

simple_server實現了一個簡易的http服務器,我們可以用它來運行一個wsgi應用

2.1:wsgi規范2

下面示例我們可以用wsgiref這個包實現一個簡單的wsgi web框架來理解其工作流程:

 

2.2:wsgi規范3

上面的代碼中,我們使用了wsgiref包簡易的實現了一個wsgiweb框架,其中我們依據傳入的env中獲取到url后綴來匹配router字典中對應的處理函數

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

Start_response函數作為參數傳入runserver應用中,必須要start_response(status,header)來進行響應,它是由網關接口定義的函數。

在上述中可以看出,wsgi的作用是在web服務器和web應用之間的橋梁,web服務器監聽將客戶端請求轉發給實現wsgi規范接口處理,wsgi接將請求進行中轉給上層的web應用處理,web應用處理完成并生成響應返回給wsgi接口,然后web服務器將收到的響應返回給客戶端。

2.3:一個最基本應用

Flask框架也是依據上面的規范實現的web框架,我們可以看下flask源碼中對于上述的封裝,不過它做了更高層次的抽象

 

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

接下里用flask運行一個hello wordl

2.4:一個最基本應用分析

  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 ‘<h1>Hello World!</h1>‘ 
  12.  
  13. if __name__ == '__main__'
  14.  
  15. app.run() 
  16.  
  17. python hello.py  

2.5:最基本應用

app = Flask(__name__) 代碼使用Flask類生成一個應用實例

  1. @app.route('/'
  2.  
  3. def index(): 
  4.  
  5. return ‘<h1>hello world</h1>’  

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

比如訪問192.168.1.19

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

訪問192.168.1.19/blog

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

2.6:可變url

在一般業務中,url都是動態可變的,在flask中我們這樣設置可變url

  1. @app.route(‘/hello/<name>’) 
  2.  
  3. def hello(name): 
  4.  
  5. return ‘<h1>hello {}’.format(name 

示例:

訪問192.168.1.19/hello/jack

訪問192.168.1.19/hello/rose

<name> 被尖括號抱起來的部分代表url中與python處理函數中對應的可變部分.

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

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

2.7:可變url自定義裝換器

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

這里自定義一個轉換器

 

  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 

將自定義轉換器加入到app應用url_map中,當客戶端輸入參數時,可以以,我們自行設置的分隔符做轉換

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

在生產環境中客戶端到服務端,使用python開發應用的一般流程是如下圖所示:

 

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

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 ‘<h1>hi {}</h1>’.format(name 

訪問:

192.168.1.19/hi?name=mike

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

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

request請求對象是flask內部封裝的一個全局對象,這個對象是線程隔離的,必須運行在當前請求中的上下文,直接運行會報錯,它通過werkzeug模塊中localproxy在localstack這種數據結構尋找當前請求

常見的request客戶端變量

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

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

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

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

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

3.1 Flask入門:響應與會話

from flask import make_respones

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

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

 

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

 

4.1 flask中的讀入配置

app = Flask(__name__)

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

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

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

 

用函數封裝配置文件寫入app,這樣可以依據參數來區分開發環境與生產環境的配置文件。

 

4.2工廠方法創建app

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

 

4.3為何需要工廠方法創建app?

當需要運行app的時候,可以通過工廠方法傳遞參數來生成不同的app對象,方便的進行測試不同的app,并且生成多個app的時候可以進行分別進行請求處理,流量負載等,通過以下示例說明

 

5.0鉤子函數

flask中鉤子函數作用是將被裝飾的函數注冊到app當中,在不同階段執行。

app.first_request: 在***次請求之前執行

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

app.after_request: 在每次請求之后執行

app.teardown_appcontext: 不管是否有異常出現,都會在每次請求之后執行

app.errorhandler:接受狀態碼,并且自定義返回錯誤處理信息頁面

5.1鉤子函數before_request

 

5.2鉤子函數errorhandler

 

5.3藍圖

藍圖將應用進行模塊化,能夠很方便的將不同的功能和路由區分開,并且易于維護,藍圖基于相同的url前綴來作區分。

功能類似的視圖函數組合在一起作為藍圖的組件,將應用進行分割,極大簡化了大型應用的復雜度,藍圖要注冊到app對象中,藍圖的使用方式與app的使用方式很像

藍圖提供模板過濾器、靜態文件、模板和其它功能

5.4藍圖生成

將user這些相似的功能分成一個藍圖模塊,注意藍圖文件不能和藍圖對象同名,否則會沖突報錯

 

5.5藍圖注冊

v 當以上user實例化時,必須將此注冊到app應用中,藍圖才能生效,url_prefix為自定義添加的url后綴

 

6.0flask擴展使用

v flask以插件形式開發擴展功能,其中許多優秀第三方插件可以直接使用,提升開發效率,常見項目開發用到的插件有flask_sqlachemy、flask_redis、flask_login、flask_admin等等

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

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

6.1flask_sqlalchemy

v 實例化flask_sqlalchemy,生成db對象后續初始化到app中

 

6.2flask插件初始化

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

 

6.3 flask_sqlalchemy定義model

使用上述db對象,model字段繼承db.Model,在mvc中此表示model層,用來進行數據庫表字段映射關聯以及數據寫入保存等.

 

6.4 flask_sqlalchemy進行用戶驗證

 

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

使用flask可以輕松開發應用,每一種web框架都有其自身利弊,對于現代web開發的需求來說,微框架很適合快速迭代式開發,***的理解的方法是實踐,可以依據以上對flask有一個大體理解之后進行一個簡單的應用開發。 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2023-08-29 07:31:18

科技運維數字化

2017-04-13 15:51:46

運維底線應用

2020-03-12 10:16:45

代碼Java多線程

2019-10-29 16:42:36

第一線

2010-07-12 15:25:20

移動開發

2014-08-28 13:58:15

錘子測評

2019-05-05 09:49:17

Leader主管技術

2019-03-26 08:31:37

技術主管團隊

2021-08-30 15:41:13

Kafka運維數據

2013-01-16 10:37:20

盈利開發者移動應用

2024-06-06 08:50:43

2022-04-19 08:14:59

技術人加班領域

2019-07-26 13:44:45

2017-04-26 09:40:00

2022-08-09 10:05:57

Linux命令

2023-12-11 15:44:09

2014-04-14 10:21:15

開發運維DevOps

2018-02-07 08:32:42

2017-10-20 17:29:29

華為

2018-07-03 17:33:09

華為
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人综合视频在线观看 | 日韩精品在线看 | 亚洲一区二区精品视频在线观看 | 欧美一区二区三区在线视频 | 亚洲色图综合网 | 国产色网| 在线观看av网站永久 | a在线免费观看 | 国产精品一区二区福利视频 | 伊人久久免费 | 欧美成人精品欧美一级 | 午夜精品一区二区三区免费视频 | 久久av一区 | www.亚洲视频 | 日本一道本视频 | 欧美一级做性受免费大片免费 | av一级一片 | 激情黄色在线观看 | 秋霞在线一区二区 | 99视频免费播放 | 欧美成ee人免费视频 | 丝袜毛片 | 中文字幕视频一区二区 | 最新国产精品精品视频 | av大片 | 国产精品乱码一区二三区小蝌蚪 | 日本在线黄色 | 日韩欧美一区二区三区在线播放 | 国产成人叼嘿视频在线观看 | 久久国产欧美日韩精品 | 国产欧美二区 | 欧美色a v | 高清国产午夜精品久久久久久 | 亚洲午夜电影 | 亚洲国产精品久久久 | 精品亚洲一区二区 | 午夜专区 | 欧美一级免费观看 | 日本人和亚洲人zjzjhd | 黄色大片网站 | 国产1页 |