产品经理也能读懂的技术:什么是WSGI

时间: 2018-12-17阅读: 655标签: 产品

尝试用最浅显的方式来说明什么是WSGI,据说产品妹子都读懂了。

一个完整的 Web 应用包含两部分,一个是服务器程序(Server),一个是应用程序(Application),服务器程序负责接收浏览器发送过来的请求,应用程序负责处理具体的业务逻辑。 比如我基于 Django 框架开发一个博客应用,部署在生产环境时会用 Gunicorn 或者 Uwsgi 作为服务器程序。

Python 中 Web 框架非常多,Flask、Django、Bottle、Pyramid、Tornado 等等,甚至你也自己也可以造一个 Web 框架,那么这么多框架,为什么他们都可以用 Gunicorn 或者 Uwsgi 来部署呢?

答案就是 WSGI 规范。

WSGI 不是框架,也不是一个模块,而是介于 Web应用程序(Web框架)与 Web Server 之间交互的一种规范。只要大家都遵循WSGI规范实现 Web 框架,就可以 使用 Gunicorn 来运行,规范最早在 PEP333 中被提出。


WSGI 规定了Web服务器(Server)和应用程序(Application)双方各自需要实现什么接口,以便两者能完美的配合使用,这个和 USB Type-C 规范很像, 只要手机和充电线都遵循了 Type-C 接口规范, 大家的充电线就可以复用,不同的是充电谁快谁慢的问题,而苹果没有遵循Type-C规范,所以只有他自家的线才能充苹果手机。

现在你应该差不多理解什么是WSGI了,那么 WSGI 对应用程序是如何规范的呢? 很简单,你只需要写一个符合以下格式的函数即可:

def app(environ, start_response):
    start_response("200 OK", [("Content-Type","text/html")])
    return ["Hello world!\n"]

这个函数必须接收两个参数,environ 是一个类似字典的数据结构,封装了浏览器的请求数据。 start_response 是一个函数,必须在app 里面调用,参数就是状态码和响应内容的类型。app 的返回值就是请求的响应数据。 最终 app 是被 server 来调用的。

现在我们用 Python 内建的 http server 来启动这个程序

from wsgiref.simple_server import make_server

if __name__ == "__main__":
    httpd = make_server("", 8000, app)
    print("Serving http on port 8000")
    httpd.serve_forever()

启动,访问地址:localhost:8000


来自: Python之禅(微信号:VTtalk) 

 

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/1619

关闭

现代软件开发:销售催产品,产品催开发,开发催测试

团队开发没有人会使用的功能,他们不知道为什么要开发它们。他们已经沦为了数字管道工。然而,令人感到震惊的是,工程团队仍然关心着产品和客户!事实上,他们最大的抱怨是没有资源去修复 bug 或者对现有功能做出一些小改进

从需求到上线,产品经理你挖了多少坑?

近期负责的一个卡券功能,即我们通常所说的代金券功能已在网站上线并投入使用。这部分工作算是暂且告一段落,也差不多可以就此做一个阶段性的总结。

一个失败的技术型产品

做个一个技术型的产品,是很多技术人员梦寐以求的事情。一个是可以满足自己技术的梦想。一个是可以由技术人员来主导。时间上有明确的规划,半年后一定要上线第一个版本

什么技能产品经理不会提,但技术人必须懂?

缓存是搭建高性能高并发系统的必备手段之一,通常用来解决性能瓶颈,是程序员的必备知识点,也是面试必备考点。尽管,产品经理大概率不会关注系统性能,但程序员在实现需求的时候必须思考系统承载的并发量和用户量

区块链产品必学的15个基础概念

掌握这15个概念,相信可以帮助你了解区块链是什么、它的运作原理以及相关特征等信息。世界上唯一不变的就是变化的存在。时代的发展变化在互联网革命后变得更加迅猛

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!