返回顶部
首页 > 资讯 > 后端开发 > Python >Python 17.3 WSGI接口
  • 164
分享到

Python 17.3 WSGI接口

接口PythonWSGI 2023-01-31 01:01:14 164人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

WSGI接口了解了Http协议和html文档,我们其实就明白了一个WEB应用的本质就是:1、浏览器发送一个HTTP请求;2、服务器收到请求,生成一个HTML文档;3、服务器把HTML文档作为HTTP响应的Body发送给浏览器。4、浏览器收到

WSGI接口

了解了Http协议和html文档,我们其实就明白了一个WEB应用的本质就是:
1、浏览器发送一个HTTP请求;

2、服务器收到请求,生成一个HTML文档;

3、服务器把HTML文档作为HTTP响应的Body发送给浏览器。

4、浏览器收到HTTP响应,从HTTP Body中取出HTML文档进行显示。

所以,最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,并返回。Apache\Nginx\Lighttpd等这些常见的静态服务器就是干这事的。

如果要动态生成HTML,上述事情就要自己实现。不过,接收HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己写这些底层代码,还没开始写动态HTML就要先花半个月时间读HTTP规范了。

正确的做法是底层代码由专门的服务器软件实现,我们用python专注生成HTML文档。因为我们不希望接触到tcp连接、HTTP原始请求和响应格式,所以,需要一个统一的接口,让我们专心用Python编写Web业务。

这个接口就是WSGI:Web Server Gataway Interface。

WSGI接口定义非常简单,它只要求web开发者实现一个函数,就可以响应HTTP请求。我们来看一个最简单的Web版本的Hello,Web!

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

上面的application()函数就是一个符合WSGI标准的HTTP处理函数。它接收两个参数:
environ:一个包含所有http请求信息的dict对象;

start_response:一个发送HTTP响应的函数。

在application()函数中,调用:
start_application('200 OK',[('Content-Type','text/html')])

就发送了HTTP响应的Header,注意Header只能发送一次,也就是只能调用一次start_response()函数。start_response()函数接收两个参数,一个是HTTP响应码,一个是一组list表示的HTTP Header,每个Header用一个包含两个str的tuple表示。

通常情况下,都应该把Content-Type头发送给浏览器。其他很多常用的HTTP Header也应该发送。

然后,函数的返回值b'<h1>Hello,web!</h1>'将作为HTTP响应的Body发送给浏览器。

有了WSGI,我们关心的就是如何从environ这个dict对象拿到HTTP请求信息,然后构造HTML,通过start_response()发送Header,最后返回Body。

整个application()本身没有涉及到任何解析HTTP的部分,也就是说,底层代码不需要我们自己编写,我们只负责在更高层次上考虑如何响应请求就可以了。

这个application如何调用呢?如果我们自己调用,两个参数environ和start_response我们无法提供,返回地bytes也没有办法提供给浏览器。

所以,application必须由WSGI服务器来调用。有很多符合WSGI规范的服务器,我们可以挑选一个来用。但是我们只想尽快测试下我们编写的application()函数真的可以把HTML输出到浏览器,所以要赶紧找一个最简单的WSGI服务器,把我们的Web程序跑起来。

好消息是Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯python编写的WSGI服务器的参考实现。所谓的“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何执行效率,仅供开发和测试使用。

运行WSGI服务

我们先编写hello.py,实现Web应用程序的WSGI处理函数:
def application(environ,start_response):
    start_response('200 OK',[('Content-Type','text/html')])

    return [b'<h1>Hello,World!</h1>']

然后在编写一个server.py,负责启动WSGI服务器,加载application()函数:
from wsgiref.simple_server import make_server

from hello import application

httpd =make_server('',8000,application)

print('Serving HTTP on port 8000...')

httpd.serve_forever()

确保以上两个文件在同一目录下,然后在命令行输入python server.py来启动WSGI服务器:

wsgiref-start

注意,8000端口如果已经被其他应用占用,启动将失败,请修改为其他端口。

启动成功后,在浏览器中输入http://localhost:8000/就可以看到效果了:
hello-web

在命令行可以看到wsgiref打印的log信息:
wsgiref-log

按Ctrl+C终止服务器。

如果你觉得这个Web应用太简单,可以稍微改造下,从environ里读取PATH_INFO,这样可以显示更加动态的内容:

# hello.pydef application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    body = '<h1>Hello, %s!</h1>' % (environ['PATH_INFO'][1:] or 'web')    
    return [body.encode('utf-8')]

你可以在地址栏中输入用户名作为URL的一部分,返回Hello,xxx!

是不是有点Web APP的小感觉啦?


小结:
无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以铜鼓oenviron获得,HTTP响应的输出可以通过start_response()加上函数返回值最为Body。

复杂的Web应用程序,光靠一个WSGI处理函数还是太底层了,我们需要在WSGI之上抽象出Web框架,进一步简化Web开发。


--结束END--

本文标题: Python 17.3 WSGI接口

本文链接: https://lsjlt.com/news/184479.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python 17.3 WSGI接口
    WSGI接口了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是:1、浏览器发送一个HTTP请求;2、服务器收到请求,生成一个HTML文档;3、服务器把HTML文档作为HTTP响应的Body发送给浏览器。4、浏览器收到...
    99+
    2023-01-31
    接口 Python WSGI
  • 通过Python中的CGI接口讲解什么是WSGI
    目录前言为什么是 WSGI?WSGI 实施概略1)Application 端2)Server 端3) 作为 middleware其他资源:前言 今天在 git.oschina 的首页...
    99+
    2024-04-02
  • python中WSGI是什么,Python应用WSGI详解
    为了让大家更好的对python中WSGI有更好的理解,我们先从最简单的认识WSGI着手,然后介绍一下WSGI几个经常使用到的接口,了解基本的用法和功能,最后,我们通过实例了解一下WSGI在实际项目中如何使用...
    99+
    2022-06-04
    详解 python WSGI
  • Python WSGI 规范简介
    目录Python Web 应用部署方案 WSGI 规范 WSGI 实际应用 作为 Python Web 开发者来说,在开发程序阶段一般是不会接触到 WSGI 这个名词的,但当程序开发...
    99+
    2024-04-02
  • python-简单测试wsgi
    1.1 RESTful 架构    REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fie...
    99+
    2023-01-31
    简单 测试 python
  • 浅析Python WSGI的使用
    目录什么是WSGIWSGI对应用程序规定了什么修改代码写出符合WSGI标准的web业务层总结第一次了解python的WSGI,可能描述的不太准确。 本篇文章所依赖的python环境为...
    99+
    2023-05-17
    Python WSGI使用 Python WSGI
  • python WSGI规范的方法
    这篇文章主要讲解了“python WSGI规范的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python WSGI规范的方法”吧!1、WSGI协议规定,Application端需要成为...
    99+
    2023-06-30
  • python中什么是WSGI规范
    这期内容当中小编将会给大家带来有关python中什么是WSGI规范,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众...
    99+
    2023-06-14
  • WSGI如何在Python中使用
    本篇文章为大家展示了WSGI如何在Python中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其...
    99+
    2023-06-14
  • Python 之 WSGI、uWSGI 和 uwsgi 介绍
    一、概述WSGI 、uWSGI 和 uwsgi 是三个相关的概念,它们是在 Web 应用程序开发中使用的不同的工具和协议。下面是它们的详细介绍:WSGI(Web Server Gateway Interface):WSGI 是一个 Pyth...
    99+
    2023-05-14
    工具 开发 web
  • python WSGI Application原理是什么
    本篇文章所依赖的python环境为:什么是WSGIWSGI也称之为web服务器通用网关接口,全称是web server gateway interface。它定义了在python中web服务器与web应用程序之间应该如何通信并且处理http...
    99+
    2023-05-19
    Python application
  • Python Web开发中的WSGI协议
     在Python Web开发中,我们一般使用Flask、Django等web框架来开发应用程序,生产环境中将应用部署到Apache、Nginx等web服务器时,还需要uWSGI或者Gunicorn。一个完整的部署应该类似这样: Web ...
    99+
    2023-01-31
    协议 Python Web
  • python带你探寻WSGI Application原理
    目录引言什么是WSGIWSGI对应用程序规定了什么修改代码写出符合WSGI标准的web业务层总结引言 第一次了解python的WSGI,可能描述的不太准确。 本篇文章所依赖的pyth...
    99+
    2023-05-17
    python探寻WSGI Application python WSGI Application
  • Sqlite—Python接口
    #!/usr/bin/env python # -*- coding:utf-8 -*- import sqlite3,os,time import traceback class Sqlite(): db_file = Non...
    99+
    2017-09-30
    Sqlite—Python接口
  • Python接口自动化之接口依赖
    目录一、场景说明二、token处理思路三、JsonPath基本用法1、JsonPath介绍2、JsonPath语法3、JsonPath源码4、JsonPath实战四、token依赖实...
    99+
    2024-04-02
  • Python接口测试实战1(下)- 接口
    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战2 - 使用Python发送请求 ...
    99+
    2023-01-30
    接口 实战 测试
  • python登录接口
    基础需求: 让用户输入用户名密码认证成功后显示欢迎信息输错三次后退出程序 #!/usr/bin/python #_*_coding:utf-8_*_ user_dic={ 'hgz1':{'passwd':'123','flag'...
    99+
    2023-01-31
    接口 python
  • Python编程:接口
    1.Python文化中的接口和协议         在Python中,我们把协议定义为非正式的接口,是让Python这种动态类型语言实现多态的方式。那么,接口在动态类型语言中是怎么运作的呢?         首先,基本的事实是,Python...
    99+
    2023-10-27
    python
  • python中WSGI的工作原理是什么
    这篇文章将为大家详细讲解有关python中WSGI的工作原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所...
    99+
    2023-06-14
  • 怎么在Python中实现一个WSGI框架
    怎么在Python中实现一个WSGI框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作