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请求,调用我们编写的应用程序。这通常有很多选择,比如
- gunicorn(http://gunicorn.org/)
- uWSGI(http://uwsgi-docs.readthedocs.io/en/atest/)
- Gevet(http://www.gevent.org/)
- Waitress(https://docs.pylonsproject.org/projects/waitress/en/latest/)
不论是内置的用于开发时使用的服务器Werkzeug,还是gunicorn、uWSGI、Gevent、Waitres等 实现了规范的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)
Flask依赖的核心模块werkzeug的更多相关文章
- Nodejs进阶:核心模块net入门与实例讲解
模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...
- Material使用11 核心模块和共享模块、 如何使用@angular/material
1 创建项目 1.1 版本说明 1.2 创建模块 1.2.1 核心模块 该模块只加载一次,主要存放一些核心的组件及服务 ng g m core 1.2.1.1 创建一些核心组件 页眉组件:header ...
- Angular项目中核心模块core Module只加载一次的实现
核心模块CoreModule在整个系统中只加载一次,如何实现? 创建core Modele:ng g m core 既然CoreModule是类,就有构造函数,在构造函数中进行依赖注入. export ...
- Spring Boot 的 10 个核心模块
学习 Spring Boot 必须得了解它的核心模块,和 Spring 框架一样,Spring Boot 也是一个庞大的项目,也是由许多核心子模块组成的. 你所需具备的基础 告诉你,Spring Bo ...
- 一头扎进Spring之---------Spring七大核心模块
Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...
- Webpack 核心模块 tapable 解析(转)
原文出自:https://www.pandashen.com 前言 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器,是对前端项目实现自动化和优化必不可少的工具,We ...
- Spring Boot从零入门2_核心模块详述和开发环境搭建
目录 1 前言 2 名词术语 3 Spring Boot核心模块 3.1 spring-boot(主模块) 3.2 spring-boot-starters(起步依赖) 3.3 spring-boot ...
- webpack核心模块tapable用法解析
前不久写了一篇webpack基本原理和AST用法的文章,本来想接着写webpack plugin的原理的,但是发现webpack plugin高度依赖tapable这个库,不清楚tapable而直接去 ...
- spring的核心模块有哪些?
Spring的七个核心模块,供大家参考,具体内容如下 1.Spring core:核心容器 核心容器提供spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关 ...
- 嵌入式系统图形库GUI核心模块介绍
本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...
随机推荐
- 【腾讯云 HAI域探秘】探索AI绘画之路:利用腾讯云HAI服务打造智能画家
前言 随着人工智能的飞速发展,AI在艺术创作领域的应用正经历着一场革命性的变革.在这个数字时代,腾讯云的高性能应用服务HAI(Hyper Application Inventor)为艺术家和创作者提供 ...
- Transformers 中原生支持的量化方案概述
本文旨在对 transformers 支持的各种量化方案及其优缺点作一个清晰的概述,以助于读者进行方案选择. 目前,量化模型有两个主要的用途: 在较小的设备上进行大模型推理 对量化模型进行适配器微调 ...
- 重学Java(二):对象无处不在
前言 本系列文章内容来自于<Thinking in Java>作者的最新续作<On Java>基础卷,作者根据最新 Java 8.11.17的内容,重讲了Java的编程思想,值 ...
- C#12中的Collection expressions(集合表达式语法糖)
C#12中引入了新的语法糖来创建常见的集合.并且可以使用..来解构集合,将其内联到另一个集合中. 支持的类型 数组类型,例如 int[]. System.Span<T> 和 System. ...
- 实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库
C++ 是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库.以下是一些示例代码,演示如何使用 C++ 连接 SQL Server.MySQL.Oracle.ACCESS.SQLite 和 ...
- 平台工程时代的 Kubernetes 揭秘:2023年生产状况报告深度剖析
Kubernetes 在生产环境中的复杂性已经成为常态,在2023年这个平台工程盛行的时代,容器管理的最大亮点可能在于其灵活性,然而在运维政策和治理等方面仍然存在诸多挑战.八年过去了,在生产环境中使用 ...
- 【Javaweb】Servlet十 | HttpServletResponse类和HttpServletRequest类
HttpServletResponse类的作用 HttpServletResponse类和HttpServletRequest类一样.每次请求进来,Tomcat服务器都会创建一个Response对象传 ...
- 【UniApp】-uni-app-CompositionAPI应用生命周期和页面生命周期
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-OptionAPI应用生命周期和页面生命周期 那么了解完了uni-app-OptionAPI应用生命周期和页面生命周期之后,这篇文章来 ...
- 吉特日化MES配料工艺参数标准版-第二版
作者:情缘 出处:http://www.cnblogs.com/qingyuan/ 关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路 版权声明:本文版权归作者和博客园共有 ...
- Head First Java学习:第七章-继承和多态
第七章:继承和多态 1. 覆盖(override) 覆盖的意思是由子类重新定义继承下来的方法,以改变或延伸此方法的行为. 2. 继承(extends) 类的成员:实例变量+方法 实例变量无法覆盖是因为 ...