Flask依赖的核心模块werkzeug

Flask的web框架实现

Flask是python Web框架,自然要遵 WSGI 规范,需要同时实现服务端程序+应用程序,并且要丰富完善请求和响应的处理。
Flask自身并没有实现WSGI,而是依赖werkzeug来实现WSGI程序。在开发时,我们使用flask run命令启动Flask,其中服务端程序就是由Werkzeug提供的,应用程序就是Flask中程序实例app
flask demo

import time
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

在生产环境中,通常需要一个更强健,性能更高的WSGI服务器。这些 WSGI 服务器也被称为 WSGI 容器(Standalone WSGI Container),因为它们可以高效的处理HTTP请求,调用我们编写的应用程序。这通常有很多选择,比如

不论是内置的用于开发时使用的服务器Werkzeug,还是gunicornuWSGIGeventWaitres等 实现了规范的WSGI服务器,都可以用运行我们的Flask。

werkzeug

由于Flask是依赖werkzeug来实现的服务端程序,下面来认识同样由Falsk团队开发的werkzeug模块。
Werkzeug是一个德语名字,译为“工具”的意思,在python中是一个专门用来处理HTTP和WSGI的工具库,可以方便的在python程序中处理HTTP协议相关内容。需要注意的是werkzeug不是一个web服务器,也不是一个web框架,而是一个工具包。官方的介绍说是一个WSGI工具包,它可以作为一个Web框架的服务端库, 因为它封装好了很多Web框架的东西,例如 Request,Response等等。安装flask时会依赖的安装好werkzeug。

简单demo
werkzeug_demo.py

from werkzeug.serving import run_simple

def application(environ, start_response):
    start_response('200 ok', [('Content-Type', 'text/html')])
    return [b'<h1>hello world!</h1>']

if __name__ == "__main__":
    run_simple('localhost', 5000, application)


flask使用werkzeug

flask中如何使用werkzeug作为服务端程序呢?
在启动flask时使用的flask run命令,本质上就是通过werkzeug来启动一个服务端程序。

def run(self, host='localhost', port=5000, **options):
    from werkzeug import run_simple
    if 'debug' in options:
        self.debug = options.pop('debug')
    options.setdefault('use_reloader', self.debug)
    options.setdefault('use_debugger', self.debug)
    return run_simple(host, port, self, **options)
posted @ 2022-02-15 11:32  金色旭光  阅读(1560)  评论(0编辑  收藏  举报