前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WSGI解惑

WSGI解惑

作者头像
菜菜cc
发布2022-11-15 21:23:08
发布2022-11-15 21:23:08
48400
代码可运行
举报
运行总次数:0
代码可运行

WSGI简介

WSGI(Web Server Gateway Interface, Web服务器网关接口)是Python中定义的一个网关协议,规定了Web 服务器如何跟应用程序交互。Web服务器可以理解为一个Web应用的容器,通过它可以启动应用,进而提供HTTP 服务。只要应用程序是基于WSGI协议设计的,那么它就可以运行在任何实现了WSGI协议的Web服务器上。WSGI允许开发者将选择Web框架和选择Web服务器进行分离,这就是使用统一的协议的好处。

WSGI原理

WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。以一个最简单的直接返回’hello world’为例。

代码语言:javascript
代码运行次数:0
运行
复制
def application(environ, start_response):
    # 调用Web服务器传递过来的函数来设置HTTP的head
    start_response('200 OK', [('Content-Type', 'text/html')])
    # 返回body
    return [b'<h1>hello world!</h1>']

application函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:

  • environ: 包含HTTP请求信息的dict对象
  • start_response: 设置HTTP响应的函数

结合下图进行理解

当浏览器向Web服务器发起请求后,以下过程来生成响应返回给浏览器:

  • 1.Web服务器调用Web应用程序中的application函数,传递环境变量和start_response函数的引用
  • 2.在application函数中调用从web服务器里传递过来的start_response函数引用,该函数设置了head信息
  • 3.application函数在最后用return关键字返回了body,该函数调用完毕
  • 4.Web服务器组装head和body后给浏览器返回响应

WSGI实战

Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器。该服务器完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。

编写hello.py,实现application函数

代码语言:javascript
代码运行次数:0
运行
复制
# coding=utf-8

def application(environ, start_response):
    # 调用Web服务器传递过来的函数来设置HTTP的head
    start_response('200 OK', [('Content-Type', 'text/html')])
    # 返回body
    return [b'<h1>hello world!</h1>']

同级目录下编写server.py,创建服务器并开始监听http请求

代码语言:javascript
代码运行次数:0
运行
复制
# coding=utf-8

from wsgiref.simple_server import make_server                                   
from hello import application

# 创建服务器:
httpd = make_server('127.0.0.1', 8000, application)
print('start...')
# 开始监听HTTP请求:
httpd.serve_forever()

在命令行输入python server.py启动服务器

可以看到程序阻塞着,等待着浏览器请求,在浏览器中输入http://127.0.0.1:8000/,可以看到运行结果

同时命令行输出log信息

本文作者: Ifan Tsai  (菜菜)

本文链接: https://cloud.tencent.com/developer/article/2164586

版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WSGI简介
  • WSGI原理
  • WSGI实战
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档