返回顶部
首页 > 资讯 > 后端开发 > Python >python内置库wsgiref怎么使用
  • 669
分享到

python内置库wsgiref怎么使用

2023-06-15 09:06:15 669人浏览 独家记忆

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

摘要

这篇文章主要介绍python内置库wsgiref怎么使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!WSGI基本原理1. WSGI处理过程浏览器到WSGI Server:浏览器发送的请求会先到WSGI Server

这篇文章主要介绍python内置库wsgiref怎么使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

WSGI基本原理

1. WSGI处理过程

python内置库wsgiref怎么使用

  1. 浏览器到WSGI Server:浏览器发送的请求会先到WSGI Server。

  2. environ:WSGI Server会将Http请求中的参数等信息封装到environ(一个字典)中。

  3. WSGI Server到WSGI App:App就是我们自己编写的后台程序,每个URL会映射到对应的入口处理函数(或其他可调用对象),WSGI Server调用后台App时,会将environ和WSGI Server中自己的一个start_response函数注入到后台App中。

  4. 逻辑处理:后台函数(或其他可调用对象)需要接收environ和start_response,进行逻辑处理后返回一个可迭代对象,可迭代对象中的元素为HTTP正文。

  5. WSGI App到WSGI Server:后台函数处理完后,会先调用start_response函数将HTTP状态码、报文头等信息(响应头)返回给WSGI Server,然后再将函数的返回值作为HTTP正文(响应body)返回给WSGI Server。

  6. WSGI Server到浏览器:WSGI Server将从App中得到的所有信息封装为一个response返回给浏览器。

2. WSGI示例

wsgiref简单示例

运行以下示例程序后,在浏览器中输入以http://127.0.0.1:9999/开头的随意一个url都可以看到返回结果。实例程序中所有url都会以同一个App进行处理,实际生产环境中不同的url肯定是需要映射到不同的App上的,但这部分本文不作讲解。

# wsgiref是Python自带的内置库,它用来开发者对wsgi进行测试用的,不可以用在生产环境中from wsgiref.simple_server import make_server, demo_app# wsgi也是基于Socket server编写# 默认情况下会将所有url都传入demo_app进行处理,具体可参考demo_app源码# app参数可以是任何可调用对象,但是内部处理需要参考demo_app源码,即environ处理、start_response调用、返回值类型ws = make_server('127.0.0.1', 9999, demo_app)# 启动服务ws.serve_forever()

demo_app源码

def demo_app(environ,start_response):    from io import StringIO    stdout = StringIO()    print("Hello world!", file=stdout)    print(file=stdout)    # environ是一个字典,包含了所有请求信息    h = sorted(environ.items())    for k,v in h:        print(k,'=',repr(v), file=stdout)    # return之前需要调用start_response设置响应头信息    start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])    return [stdout.getvalue().encode("utf-8")]  # 一个可迭代对象,元素为byte类型,元素内容依据start_response中指定的Content-Type来指定

demo_app类定义的两种方式

# 第一种方式:定义类的__init__和__iter__方法,前者用来接收和处理environ和start_response,后者生成一个可迭代对象# make_server中app参数只需传入类名即可class ApplicationClass:    def __init__(self, environ, start_response):        self.e = environ        self.sr = start_response            def __iter__(self):        from io import StringIO        stdout = StringIO()        print("Hello world!", file=stdout)        print(file=stdout)        h = sorted(self.e.items())        for k, v in h:            print(k, '=', repr(v), file=stdout)        self.sr("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])        yield from [stdout.getvalue().encode("utf-8")]                # 第二种方式:定义__call__方法,接收和处理environ和start_response,并返回一个可迭代对象# make_server中app参数需要传入类的实例class ApplicationInstance:    def __call__(self, environ, start_response):        from io import StringIO        stdout = StringIO()        print("Hello world!", file=stdout)        print(file=stdout)        h = sorted(environ.items())        for k, v in h:            print(k, '=', repr(v), file=stdout)        start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])        return [stdout.getvalue().encode("utf-8")]

3. WSGI WEB服务器和应用程序

WSGI web服务器

  • 本质上是一个tcp服务器,监听在特定的端口上。

  • 支持HTTP协议,能够解析HTTP请求报文,能够按HTTP协议将响应数据封装为报文并返回给浏览器。

  • 实现了WSGI协议,该协议约定了和应用程序之间的接口,即url到app之间的映射。

WSGI应用程序

  • 遵从WSGI协议。

  • 本身是一个可调用对象。

  • 调用start_response,返回响应头部。

  • 返回包含正文的可迭代对象。

以上是“python内置库wsgiref怎么使用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网Python频道!

--结束END--

本文标题: python内置库wsgiref怎么使用

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

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

猜你喜欢
  • python内置库wsgiref怎么使用
    这篇文章主要介绍python内置库wsgiref怎么使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!WSGI基本原理1. WSGI处理过程浏览器到WSGI Server:浏览器发送的请求会先到WSGI Server...
    99+
    2023-06-15
  • python 内置库wsgiref的使用(WSGI基础入门)
    目录WSGI基本原理1. WSGI处理过程2. WSGI示例3. WSGI web服务器和应用程序WSGI基本原理 1. WSGI处理过程 浏览器到WSGI Server:浏览器发送的请求会先到WSG...
    99+
    2022-06-02
    python wsgiref python WSGI
  • 怎么使用Python内置库collections
    这篇文章主要讲解了“怎么使用Python内置库collections”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python内置库collections”吧!Python中有很多好...
    99+
    2023-06-02
  • 怎么使用Python内置数据库
    这篇文章主要讲解了“怎么使用Python内置数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python内置数据库”吧!导入和使用这里我们说“内置”的意思就是,你甚至不需要运行 ...
    99+
    2023-06-16
  • python内置库怎么调用
    要调用Python内置库,只需使用import关键字,后跟所需库的名称。例如,要调用math库,可以使用以下语句: import m...
    99+
    2023-10-24
    python
  • Python内置logging怎么使用
    这篇文章主要讲解了“Python内置logging怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python内置logging怎么使用”吧!logging 的主要作用提供日志记录的接...
    99+
    2023-07-02
  • 怎么使用Python内置函数
    这篇文章主要介绍“怎么使用Python内置函数”,在日常操作中,相信很多人在怎么使用Python内置函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python内置函数”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-01
  • python怎么使用prettytable内置库美化输出表格
    这篇文章主要介绍“python怎么使用prettytable内置库美化输出表格”,在日常操作中,相信很多人在python怎么使用prettytable内置库美化输出表格问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-07-02
  • Python常用内置函数怎么使用
    这篇文章主要介绍“Python常用内置函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python常用内置函数怎么使用”文章能帮助大家解决问题。一、abs()abs() 用于返回一个数的绝...
    99+
    2023-07-05
  • python中内置srted函数怎么使用
    srted内置函数在python的使用方法srted()函数是用于处理多种类型数据的排序。语法:sorted(iterable, cmp=None, key=None, reverse=False)注:iterable:可迭代对象。cmp:...
    99+
    2024-04-02
  • python中的内置函数怎么使用
    Python中的内置函数是可直接使用的函数,不需要先导入任何模块。你可以直接在代码中调用这些函数来完成特定的操作。以下是一些常用的内...
    99+
    2023-09-07
    python
  • python爬虫怎么使用内置的scrapy内置下载文件
    这篇文章主要介绍python爬虫怎么使用内置的scrapy内置下载文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其...
    99+
    2023-06-14
  • python使用prettytable内置库美化输出表格
    目录前言:安装案例从csv文件添加数据,并打印出表格从HTML导入数据前言: 大多数时候,需要输出的信息能够比较整齐的输出来,在使用mysql的时候,我们使用命令符之后,会输出特别好...
    99+
    2024-04-02
  • 怎么使用Python库
    本篇内容介绍了“怎么使用Python库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据科学的五个重要步骤包括:获取数据清理数据探索数据构建...
    99+
    2023-06-16
  • python容器的内置通用函数怎么使用
    本篇内容主要讲解“python容器的内置通用函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python容器的内置通用函数怎么使用”吧!这些数据容易的通用操作都有哪些?除了数据的增删查...
    99+
    2023-06-21
  • Python的一个内置模块Collections怎么使用
    这篇文章主要讲解了“Python的一个内置模块Collections怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的一个内置模块Collections怎么使用”吧!1、模...
    99+
    2023-07-06
  • 关于Python 内置库 itertools
    目录1、itertools库2、使用itertools3、itertools.accumulate4、itertools.chain5、itertools.combinations_...
    99+
    2024-04-02
  • Python编程中内置的NotImplemented类型怎么使用
    本篇内容介绍了“Python编程中内置的NotImplemented类型怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、NotIm...
    99+
    2023-06-29
  • python openpyxl库怎么使用
    这篇文章主要介绍“python openpyxl库怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python openpyxl库怎么使用”文章能帮助大家解决问题。openpyxl是一个第三方...
    99+
    2023-06-27
  • python内置的数据库是什么
    这篇文章主要介绍“python内置的数据库是什么”,在日常操作中,相信很多人在python内置的数据库是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python内置的数据库是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作