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应用

就是这样!整个文件。称其为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>
,说我们要检查环境的内容。我们可以轻松地创建一个中间件来这样做,如此示例:
>在这里,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>
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>
如果您享受 >
经常询问有关Python Web应用程序和WSGI > WSGI在Python Web应用程序中的作用是什么? >使用WSGI部署Python Web应用程序,涉及多个步骤。首先,您需要安装WSGI服务器,例如Gunicorn或UWSGI。接下来,您需要配置Web服务器以使用WSGI服务器作为处理请求到应用程序的代理。这涉及修改服务器的配置文件以包括必要的WSGI设置。最后,您需要启动WSGI服务器,并将其指向您的应用程序的WSGI文件。 > WSGI和ASGI和ASGI和ASGI? ASGI都是Python Web应用程序的接口,但它们的目的不同。 WSGI是一个同步接口,允许在Web服务器和Web应用程序之间进行通信。 ASGI或异步服务器网关接口是支持异步操作的WSGI的扩展。这意味着,使用ASGI,您的应用程序可以同时处理多个请求而不会阻止,从而使其在实时应用程序中更有效。 >在python Web应用程序中使用WSGI有什么好处? 是的,您可以将WSGI与烧瓶一起使用。实际上,范围为WSGI应用程序,默认情况下是WSGI应用程序。当您创建烧瓶应用程序时,实际上您正在创建一个WSGI应用程序,烧瓶框架将使用该应用程序来处理传入请求并发送响应。 > WSGI中间件是位于WSGI服务器和WSGI应用程序之间的组件。它可以处理请求在将申请和响应发送回客户之前,然后再处理。中间件可用于实现各种功能,例如会话管理,URL路由和身份验证。组装库的灵活性,可以直接与WSGI合作可以很好
但是服务器呢?就是一切!
>
>
> python的一些流行的WSGI服务器是什么?可用于Python,每种都有自己的优点和劣势。一些最常用的包括枪,UWSGI和MOD_WSGI。 Gunicorn以其简单性和易用性而闻名,而UWSGI则以其速度和效率而受到赞扬。另一方面,mod_wsgi是Apache服务器的模块,通常用于企业环境中。>如何使用WSGI?
>我可以将WSGI与Django一起使用?实际上,Django附带了一个内置的WSGI应用程序,您可以用来部署Django项目。 Django WSGI应用程序充当您的Django项目和Web服务器之间的桥梁,允许他们交流和交换请求和响应。
>如何在Python中创建WSGI应用程序? >在Python中创建WSGI应用程序涉及定义一个接受两个参数的函数:环境字典和start_response collable。环境字典包含有关传入请求的信息,而start_response collable用于启动对请求的响应。您的功能应该返回产生响应主体的效果。
>
>我可以将WSGI与烧瓶使用WSGI?> WSGI中间件是什么?
以上是Python Web应用程序:WSGI的基础知识的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

该试点程序是CNCF(云本机计算基础),安培计算,Equinix金属和驱动的合作,简化了CNCF GitHub项目的ARM64 CI/CD。 该计划解决了安全问题和绩效

该教程通过使用AWS服务来指导您通过构建无服务器图像处理管道。 我们将创建一个部署在ECS Fargate群集上的next.js前端,与API网关,Lambda函数,S3桶和DynamoDB进行交互。 Th

与这些顶级开发人员新闻通讯有关最新技术趋势的了解! 这个精选的清单为每个人提供了一些东西,从AI爱好者到经验丰富的后端和前端开发人员。 选择您的收藏夹并节省时间搜索REL
