Python wsgi 简介

本文介绍了Python的WSGI标准,它作为Web服务器与Web应用程序之间的接口。详细讨论了uWSGI、WSGI和uwsgi之间的区别,并解释了它们在网络项目流程中的作用。此外,还涉及HTTP基础、Python知识,以及WSGI在服务器端和应用程序端的角色。通过Middleware的概念,展示了如何处理请求和响应。
摘要由CSDN通过智能技术生成

python wsgi 简介

基础知识

uWSGI ,WSGI和uwsgi的区别

WSGI:

WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。也可以认为WSGI是一种通信协议。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。

WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。

WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口

uWSGI:

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

uwsgi:

uwsgi是服务器和服务端应用程序的一种协议,规定了怎么把请求转发给应用程序和返回; uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信

为了方便理解,uWSGI ,WSGI和uwsgi在网站项目流程图中的功能如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hTCUGMx3-1574995620965)(assets/1454579-20181209002415550-68432975.png)]

Python 知识

  • iterator 和 generator
  • 函数的高级用法:嵌套函数,作为参数传递等等
  • 了解 decorator 会对理解 wsgi 有很大的帮助
  • python 的 callable 概念
  • classmethod 和 staticmethod 的概念
  • web 编程的基础

HTTP 基础

对于 web 应用程序来说,最基本的概念就是客户端发送请求(request),收到服务器端的响应(response)。

下面是简单的 HTTP 请求:

 GET /Index.html HTTP/1.1\r\n
 Connection: Keep-Alive\r\n
 Accept: */*\r\n
 User-Agent: Sample Application\r\n
 Host: www.microsoft.com\r\n\r\n

内容包括了 method、 url、 protocol version 以及头部的信息。而 HTTP 响应(不包括数据)可能是如下的内容:

 HTTP/1.1 200 OK
 Server: Microsoft-IIS/5.0\r\n
 Content-Location: http://www.microsoft.com/default.htm\r\n
 Date: Tue, 25 Jun 2002 19:33:18 GMT\r\n
 Content-Type: text/html\r\n
 Accept-Ranges: bytes\r\n
 Last-Modified: Mon, 24 Jun 2002 20:27:23 GMT\r\n
 Content-Length: 26812\r\n

实际生产中,python 程序是放在服务器的 http server(比如 apache, nginx 等)上的。现在的问题是 **服务器程序怎么把接受到的请求传递给 python 呢,怎么在网络的数据流和 python 的结构体之间转换呢?**这就是 wsgi 做的事情:一套关于程序端和服务器端的规范,或者说统一的接口。

WSGI

我们先看一下面向 http 的 python 程序需要关心哪些内容:

  • 请求
    • 请求的方法 method
    • 请求的地址 url
    • 请求的内容
    • 请求的头部 header
    • 请求的环境信息
  • 响应
    • 状态码 status_code
    • 响应的数据
    • 响应的头部

WSGI(Web Server Gateway Interface) 的任务就是把上面的数据在 http server 和 python 程序之间简单友好地传递。它是一个标准,被定义在PEP 333。需要 http server 和 python 程序都要遵守一定的规范,实现这个标准的约定内容,才能正常工作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zVnb5aDZ-1574995620965)(assets/wsgi-interface.png)]

应用程序端

WSGI 规定每个 python 程序(Application)必须是一个可调用的对象(实现了__call__ 函数的方法或者类),接受两个参数 environ(WSGI 的环境信息) 和 start_response(开始响应请求的函数),并且返回 iterable。几点说明:

  1. environstart_response 由 http server 提供并实现
  2. environ 变量是包含了环境信息的字典
  3. Application 内部在返回前调用 start_response
  4. start_response也是一个 callable,接受两个必须的参数,status(HTTP状态)和 response_headers(响应消息的头)
  5. 可调用对象要返回一个值,这个值是可迭代的。

看看具体代码的实现:

 # 1. 可调用对象是一个函数
def application(environ, start_response):
   response_body = 'The request method was %s' % environ['REQUEST_METHOD']

   # HTTP response code and message
   status = '200 OK'

   # 应答的头部是一个列表,每对键值都必须是一个 tuple。
   response_headers = [
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值