就是这样!整个文件。称其为app.py并使用任何与WSGI兼容的服务器运行,您将获得200个状态的Hello World响应。您可以使用枪龙;只需通过PIP(PIP安装枪支)安装它,然后使用Gunicorn App:App运行它。该命令告诉Gunicorn在应用模块中的App变量中获取WSGI可呼叫。
>现在,您应该非常兴奋。一个运行应用程序只有3行?那一定是某种记录(因为mod_php正在作弊,禁止PHP)。我敢打赌,您只是想了解更多。
>那么,WSGI应用程序的重要部分是什么?
>您可能已经在考虑可以使用此信息的方法,但最相关的信息可能是编写中间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固定到烧瓶应用程序上,例如,烧瓶应用程序是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中文网其他相关文章!