首页 >科技周边 >IT业界 >Python Web应用程序:WSGI的基础知识

Python Web应用程序:WSGI的基础知识

Joseph Gordon-Levitt
Joseph Gordon-Levitt原创
2025-02-18 11:40:08567浏览

Python Web应用程序:WSGI的基础知识

钥匙要点

    WSGI或Web服务器网关接口,基于所有Python Web框架,为Web服务器提供了一个常见的规范,该规范允许在不同的Web服务器和应用程序框架之间进行交互。
  • > wsgi应用程序是一个可调用的python,必须接受两个参数,即环境(一个包含请求数据的python dict)和start_fn(可召唤)。该应用程序必须使用两个参数调用start_fn:状态代码和标题列表,并返回包含响应主体中字节的值 中间件可用于扩展WSGI应用程序的功能,中间件和处理程序不需要相互了解或关心。这使得添加诸如日志记录或错误处理之类的功能变得容易。
  • > WSGI应用程序可以通过多种方式提供,枪支和UWSGI是两个流行的选择。建议在这些面前设置类似Nginx的东西以提供静态资产。>
  • 在Django,烧瓶,瓶子和其他所有Python Web框架之下,在Web Server网关接口或WSGI中,简称为空。 WSGI将Python python对Java的服务是什么 - Web服务器的常见规范,允许不同的Web服务器和应用程序框架基于共同的API进行交互。但是,与大多数内容一样,Python版本非常简单。 PEP 3333中定义了
  • wsgi,如果您想要更多信息,我鼓励您作为参考阅读。
  • >本文将从应用程序开发人员的角度向您介绍WSGI规格,并向您展示如何直接与WSGI合作以创建应用程序(如果您愿意的话)。
  • 您的第一个WSGI应用
这是可能的最基本的python Web应用程序:Python Web应用程序:WSGI的基础知识

就是这样!整个文件。称其为app.py并使用任何与WSGI兼容的服务器运行,您将获得200个状态的Hello World响应。您可以使用枪龙;只需通过PIP(PIP安装枪支)安装它,然后使用Gunicorn App:App运行它。该命令告诉Gunicorn在应用模块中的App变量中获取WSGI可呼叫。

>现在,您应该非常兴奋。一个运行应用程序只有3行?那一定是某种记录(因为mod_php正在作弊,禁止PHP)。我敢打赌,您只是想了解更多。

>

那么,WSGI应用程序的重要部分是什么?

  • wsgi应用程序是一个pythoncallable,例如函数,类或类实例,带有__call __方法
  • 应用程序必须接受两个参数:环境,这是包含请求数据的python dict,并且start_fn,本身是一个可召唤的。
  • >应用程序必须使用两个参数调用start_fn:状态代码(作为字符串),以及以2个tuples表示的标题列表。
  • >应用程序返回一个可互动的,该字符在响应主体中,方便,可流的块 - 在这种情况下,列出了包含“ Hello,World!”的字符串列表。 (如果应用程序是类,则可以在__ITER__方法中完成。
  • 例如

>您可能已经在考虑可以使用此信息的方法,但最相关的信息可能是编写中间Wares。

爵士乐
<span>def app(environ, start_fn):
</span>    start_fn<span>('200 OK', [('Content-Type', 'text/plain')])
</span>    <span>return ["Hello World!\n"]
</span>
<span>class app(object):
</span>
    <span>def __init__(self, environ, start_fn):
</span>        self<span>.environ = environ
</span>        self<span>.start_fn = start_fn
</span>
    <span>def __iter__(self):
</span>        self<span>.start_fn('200 OK', [('Content-Type', 'text/plain')])
</span>        <span>yield "Hello World!\n"
</span>
中间Wares是扩展WSGI应用程序功能的简便方法。由于您只需要提供一个可可,因此您可以将其包装在其他功能中。 例如,

,说我们要检查环境的内容。我们可以轻松地创建一个中间件来这样做,如此示例:

>在这里,log_environ是一个返回函数的函数,在推迟到原始回调之前,它可以很好地打印到环境参数。

以这种方式编写中间的优点是中间件和处理程序不必彼此了解或关心。例如,您可以轻松地将log_environ固定到烧瓶应用程序上,例如,烧瓶应用程序是WSGI应用程序。

其他一些有用的中间件想法:

<span>class Application(object):
</span>    <span>def __call__(self, environ, start_fn):
</span>        start_fn<span>('200 OK', [('Content-Type', 'text/plain')])
</span>        <span>yield "Hello World!\n"
</span>
app <span>= Application()
</span>

>如果您不想使大金字塔成为文件的底部,则可以使用Reled来一次应用一堆中间件:

>您还可以通过利用start_fn参数来编写修改响应的中间件。这是一个中间件,如果内容类型标头为文本/平原,则可以逆转输出:

>由于start_fn和响应的分离,这有点纠结,但仍然完全可行。
<span>import pprint
</span>

<span>def handler(environ, start_fn):
</span>    start_fn<span>('200 OK', [('Content-Type', 'text/plain')])
</span>    <span>return ["Hello World!\n"]
</span>

<span>def log_environ(handler):
</span>    <span>def _inner(environ, start_fn):
</span>        pprint<span>.pprint(environ)
</span>        <span>return handler(environ, start_fn)
</span>    <span>return _inner
</span>

app <span>= log_environ(handler)
</span>
>

还要注意,要严格与WSGI符合规格,我们必须在响应上检查A

> CLOSE
<span>import pprint
</span>

<span>def handle_error(handler):
</span>    <span>def _inner(environ, start_fn):
</span>        <span>try:
</span>            <span>return handler(environ, start_fn)
</span>        <span>except Exception as e:
</span>            <span>print e  # Log error
</span>            start_fn<span>('500 Server Error', [('Content-Type', 'text/plain')])
</span>            <span>return ['500 Server Error']
</span>    <span>return _inner
</span>

<span>def wrap_query_params(handler):
</span>    <span>def _inner(environ, start_fn):
</span>        qs <span>= environ.get('QUERY_STRING')
</span>        environ<span>['QUERY_PARAMS'] = urlparse.parse_qs(qs)
</span>        <span>return handler(environ, start_fn)
</span>    <span>return _inner
</span>
方法,并在此处调用。传统的WSGI应用程序也可以返回a

write

函数,而不是在调用处理程序后返回峰值。如果您希望您的中间件支持旧的应用程序,则可能需要处理这种情况。
<span># Applied from bottom to top on the way in, then top to bottom on the way out
</span>MIDDLEWARES <span>= [wrap_query_params,
</span>               log_environ<span>,
</span>               handle_error<span>]
</span>
app <span>= reduce(lambda h, m: m(h), MIDDLEWARES, handler)
</span>
>一旦您开始使用RAW WSGI稍微播放一点,您就会开始理解为什么Python实际上拥有数十个网络框架。 WSGI使从头开始建立一些东西变得非常简单。例如,您可能正在考虑路由的问题:

如果您享受组装库的灵活性,可以直接与WSGI合作可以很好

  • >模板库:只需放入您喜欢的任何模板库(例如Jinja2,pystashe),然后从处理程序中返回渲染模板!
  • >
  • >帮助您使用诸如路由或Werkzeug的路由之类的库路由。实际上,如果您想在WSGI上使用越来越多的抽象,请看一下Werkzeug。
  • >使用烧瓶或类似的数据库/迁移库。
  • >
  • 当然,对于非专业应用程序,您可能仍然想使用一个框架,以便正确处理边缘案例。
但是服务器呢?

>

有多种服务WSGI应用程序的方法。我们已经谈到了枪支,这是一个不错的选择。 UWSGI是另一个不错的选择。只需确保您在这些方面设置了类似nginx的设置以提供静态资产,并且您应该拥有一个可靠的起点。

就是一切!

>

经常询问有关Python Web应用程序和WSGI

的问题(常见问题解答)

> WSGI在Python Web应用程序中的作用是什么?

wsgi或Web服务器网关接口,是Web服务器和Web应用程序之间的标准接口。它在Python Web应用程序中起着至关重要的作用,因为它允许应用程序和Web服务器相互通信和发送请求。 WSGI充当桥梁,使Web服务器能够将请求从客户端(例如Web浏览器)转发到Web应用程序。然后,该应用程序处理请求并通过Web服务器发送回复。 Web服务器与Web应用程序进行通信。当客户端将请求发送到Web服务器时,服务器使用WSGI接口将请求传递给Web应用程序。该应用程序处理请求并返回响应,然后服务器然后将其发送回客户端。这个过程允许Web服务器和应用程序进行交互的一致和可靠的方式,无论其特定实现如何。

>

> python的一些流行的WSGI服务器是什么?可用于Python,每种都有自己的优点和劣势。一些最常用的包括枪,UWSGI和MOD_WSGI。 Gunicorn以其简单性和易用性而闻名,而UWSGI则以其速度和效率而受到赞扬。另一方面,mod_wsgi是Apache服务器的模块,通常用于企业环境中。

>如何使用WSGI?

>使用WSGI部署Python Web应用程序,涉及多个步骤。首先,您需要安装WSGI服务器,例如Gunicorn或UWSGI。接下来,您需要配置Web服务器以使用WSGI服务器作为处理请求到应用程序的代理。这涉及修改服务器的配置文件以包括必要的WSGI设置。最后,您需要启动WSGI服务器,并将其指向您的应用程序的WSGI文件。

>我可以将WSGI与Django一起使用?实际上,Django附带了一个内置的WSGI应用程序,您可以用来部署Django项目。 Django WSGI应用程序充当您的Django项目和Web服务器之间的桥梁,允许他们交流和交换请求和响应。

>

> WSGI和ASGI和ASGI和ASGI? ASGI都是Python Web应用程序的接口,但它们的目的不同。 WSGI是一个同步接口,允许在Web服务器和Web应用程序之间进行通信。 ASGI或异步服务器网关接口是支持异步操作的WSGI的扩展。这意味着,使用ASGI,您的应用程序可以同时处理多个请求而不会阻止,从而使其在实时应用程序中更有效。

>

如何在Python中创建WSGI应用程序? >在Python中创建WSGI应用程序涉及定义一个接受两个参数的函数:环境字典和start_response collable。环境字典包含有关传入请求的信息,而start_response collable用于启动对请求的响应。您的功能应该返回产生响应主体的效果。

>在python Web应用程序中使用WSGI有什么好处?

>在Python Web应用程序中使用WSGI提供了一些好处。首先,它为Web服务器和应用程序提供了标准接口,使开发和部署Python Web应用程序变得更加容易。其次,它允许更大的灵活性,因为您可以从各种与WSGI兼容的服务器和应用程序中进行选择。最后,它可以促进代码可重复使用性,因为您可以将相同的WSGI应用程序与不同的服务器和中间件使用。

>

>我可以将WSGI与烧瓶使用WSGI?

是的,您可以将WSGI与烧瓶一起使用。实际上,范围为WSGI应用程序,默认情况下是WSGI应用程序。当您创建烧瓶应用程序时,实际上您正在创建一个WSGI应用程序,烧瓶框架将使用该应用程序来处理传入请求并发送响应。

> WSGI中间件是什么?

> WSGI中间件是位于WSGI服务器和WSGI应用程序之间的组件。它可以处理请求在将申请和响应发送回客户之前,然后再处理。中间件可用于实现各种功能,例如会话管理,URL路由和身份验证。

以上是Python Web应用程序:WSGI的基础知识的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn