欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

關(guān)于WSGI與Werkzeug的詳細(xì)用法

這篇文章主要介紹關(guān)于WSGI與Werkzeug的詳細(xì)用法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗(yàn)。創(chuàng)新互聯(lián)多年互聯(lián)網(wǎng)經(jīng)驗(yàn),見的多,溝通容易、能幫助客戶提出的運(yùn)營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián),不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價(jià)值服務(wù)。

      在介紹Werkzeug之前,先介紹一下 WSGI(Python Web Server Gateway Interface),它為Python語言定義的Web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡單而通用的接口。

       關(guān)于WSGI與Werkzeug的詳細(xì)用法

WSGI 分為兩個(gè)部分:

  • Server/Gateway: 即是HTTP Server, 負(fù)責(zé)從客戶端(Nnginx、apache、IIS)接收請求,將 request 轉(zhuǎn)發(fā)給 application, 并將 application(可能是個(gè)Flask應(yīng)用) 返回的response 返回給客戶端
  • Application/Framework: 一個(gè)python web 應(yīng)用或 web 框架接收由 server 轉(zhuǎn)發(fā)的request,處理請求,并將處理結(jié)果返回給 server

可以通過下面兩張圖片來梳理一下它們之間的調(diào)用關(guān)系:

關(guān)于WSGI與Werkzeug的詳細(xì)用法

關(guān)于WSGI與Werkzeug的詳細(xì)用法

先從一份示例代碼理解:

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['Hello World!']

      一個(gè)最基本的 WSGI 應(yīng)用就是如上所示,定義了一個(gè) application 函數(shù)(callable object),callable object(可調(diào)用對象) 包括: 一個(gè)函數(shù)、方法、類或一個(gè)實(shí)現(xiàn)了__call__的實(shí)例都可以用作應(yīng)用程序?qū)ο?。這個(gè)函數(shù)接受兩個(gè)參數(shù),分別是environ和start_response。

  • environ是一個(gè)字典包含了CGI中的環(huán)境變量
  • start_response也是一個(gè)callable,接受兩個(gè)必須的參數(shù),status(HTTP狀態(tài))和response_headers(響應(yīng)消息的頭)

      通過回調(diào)函數(shù)(start_response)將響應(yīng)狀態(tài)和響應(yīng)頭返回給 server,同時(shí)返回響應(yīng)正文(response body),響應(yīng)正文是可迭代的、并包含了多個(gè)字符串。

Werkzeug


werkzeug 提供了 python web WSGI 開發(fā)相關(guān)的功能:

  • 路由處理:如何根據(jù)請求 URL 找到對應(yīng)的視圖函數(shù)
  • request 和 response 封裝: 提供更好的方式處理request和生成response對象
  • 自帶的 WSGI server: 測試環(huán)境運(yùn)行WSGI應(yīng)用

下面使用 Werkzeug 來實(shí)現(xiàn)一個(gè)簡單的WSGI應(yīng)用:

from werkzeug.wrappers import Request, Response

def application(environ, start_response):
    request = Request(environ)
    text = 'Hello %s!' % request.args.get('name', 'World')
    response = Response(text, mimetype='text/plain')
    return response(environ, start_response)

       如上代碼所示,請求數(shù)據(jù)需要環(huán)境對象,Werkzeug允許你以一個(gè)輕松的方式訪問數(shù)據(jù)。響應(yīng)對象是一個(gè) WSGI 應(yīng)用,提供了更好的方法來創(chuàng)建響應(yīng)。

       具體創(chuàng)建一個(gè) WSGI 應(yīng)用請查看文檔,后面會(huì)陸續(xù)提到Flask框架中使用到Werkzeug的數(shù)據(jù)結(jié)構(gòu)。這里貼一些官方文檔的例子,使用werkzeug創(chuàng)建一個(gè)web 應(yīng)用:

import os
import redis
import urlparse
from werkzeug.wrappers import Request, Response
from werkzeug.routing import Map, Rule
from werkzeug.exceptions import HTTPException, NotFound
from werkzeug.wsgi import SharedDataMiddleware
from werkzeug.utils import redirect
from jinja2 import Environment, FileSystemLoader

class Shortly(object):
    """ 
    Shortly 是一個(gè)實(shí)際的 WSGI 應(yīng)用,通過 __call__ 方法直接調(diào) 用 wsgi_app,
    同時(shí)通過一個(gè)可選設(shè)置創(chuàng)建一個(gè)中間件,將static文件夾暴露給用戶:
    """
    def __init__(self, config):
        self.redis = redis.Redis(config['redis_host'], config['redis_port'])

    def dispatch_request(self, request):
        return Response('Hello World!')

    def wsgi_app(self, environ, start_response):
        request = Request(environ)
        response = self.dispatch_request(request)
        return response(environ, start_response)

    def __call__(self, environ, start_response):
        return self. wsgi_app(environ, start_response)


def create_app(redis_host='localhost', redis_port=6379, with_static=True):
    app = Shortly({
        'redis_host':       redis_host,
        'redis_port':       redis_port
    })
    if with_static:
        app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
            '/static':  os.path.join(os.path.dirname(__file__), 'static')
        })
    return app
    
if __name__ == '__main__':
    from werkzeug.serving import run_simple
    app = create_app()
    run_simple('127.0.0.1', 5000, app, use_debugger=True, use_reloader=True)

       思路很簡單,我們的 Shortly 是一個(gè)實(shí)際的 WSGI 應(yīng)用。 __call__ 方法直接調(diào)用 wsgi_app 。這樣做我們可以裝飾 wsgi_app 調(diào)用中間件,就像我們在 create_app 函數(shù)中做的一樣。 

       wsgi_app 實(shí)際上創(chuàng)建了一個(gè) Request 對象,之后通過 dispatch_request 調(diào)用 Request 對象然后給 WSGI 應(yīng)用返回一個(gè) Response 對象。正如你看到的:無論是創(chuàng)建 Shortly 類,還是創(chuàng)建 Werkzeug Request 對象來執(zhí)行 WSGI 接口。最終結(jié)果只是從 dispatch_request 方法返回另一個(gè) WSGI 應(yīng)用。這部分解釋來源于官方文檔的中文版。

以上是關(guān)于WSGI與Werkzeug的詳細(xì)用法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前標(biāo)題:關(guān)于WSGI與Werkzeug的詳細(xì)用法
網(wǎng)址分享:http://aaarwkj.com/article0/gdchio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、App設(shè)計(jì)、定制網(wǎng)站、用戶體驗(yàn)搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)

廣告

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

綿陽服務(wù)器托管
99久久伊人精品综合观看| 日本女优高清不卡一二三四区| 精品欧美日韩国产一区| 精品人妻二区中文字幕| 欧美另类亚洲日本一区二区| 四虎免费在线高清观看| 欧美老熟妇一区三区精品| 中文字幕精品一区二区介绍 | 亚洲免费麻豆一区二区三区| 亚洲欧美日韩国产成人精品| 日韩在线视频免费不卡一区| 在线免费观看日韩黄片| 91精品一久久香蕉国产| 久久精品国产亚洲av波多| 亚洲高清精品一区二区| 国产91精品在线观看| 综合激情丁香久久狠狠| 91伊人久热精品午夜福利| 蜜臀视频网站在线观看| 午夜黄色福利在线观看| 亚洲日本在线观看一区| 欧美黄色一区二区三区视频| 亚洲av成人在线资源| 成人在线一区二区三区观看| 国产精品三级久久久| 91极品气质女神长腿翘臀| 免费爱爱视频在线观看| 91中文在线观看一区| 亚洲av十八禁在线播放| 国产熟女一区二区精品视频| 中文字幕久精品视频免费| 麻豆国产传媒片在线看| 成人免费在线国产视频| 大秀视频一区二区三区| 久久国产精品99亚洲| 91人妻精品丰满少妇区| 麻豆精品国产一区二区91| 国产一区二区精品日韩| 亚洲特级黄色做啪啪啪| 精品欧美一区二区三区在线| 久久热在线观看免费高清|