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

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
安卓首家接入DeepSeek背后:看见女性力量安卓首家接入DeepSeek背后:看见女性力量Mar 12, 2025 pm 12:27 PM

中国女性科技力量在AI领域的崛起:荣耀与DeepSeek合作背后的女性故事女性在科技领域的贡献日益显着。中国科技部数据显示,女性科技工作者数量庞大,在AI算法开发中展现出独特的社会价值敏感性。本文将聚焦荣耀手机,探究其率先接入DeepSeek大模型背后的女性团队力量,展现她们如何推动科技进步,重塑科技发展价值坐标系。 2024年2月8日,荣耀正式上线DeepSeek-R1满血版大模型,成为安卓阵营首家接入DeepSeek的厂商,引发用户热烈反响。这一成功背后,女性团队成员在产品决策、技术攻坚和用户

DeepSeek'惊人”盈利:理论利润率高达545%!DeepSeek'惊人”盈利:理论利润率高达545%!Mar 12, 2025 pm 12:21 PM

DeepSeek公司在知乎发布技术文章,详细介绍了其DeepSeek-V3/R1推理系统,并首次公开关键财务数据,引发业界关注。文章显示,该系统单日成本利润率高达545%,创下全球AI大模型盈利新高。DeepSeek的低成本策略使其在市场竞争中占据优势。其模型训练成本仅为同类产品的1%-5%,V3模型训练成本仅为557.6万美元,远低于竞争对手。同时,R1的API定价仅为OpenAIo3-mini的1/7至1/2。这些数据证明了DeepSeek技术路线的商业可行性,也为AI大模型的高效盈利树立了

美的推出首款DeepSeek空调:AI语音交互 可实现40万 条指令!美的推出首款DeepSeek空调:AI语音交互 可实现40万 条指令!Mar 12, 2025 pm 12:18 PM

美的即将发布搭载DeepSeek大模型的首款空调——美的鲜净感空气机T6,发布会定于3月1日下午1点30分举行。这款空调配备先进的空气智驾系统,可根据环境智能调节温度、湿度和风速等参数。更重要的是,它集成了DeepSeek大模型,支持超过40万条AI语音指令。美的此举引发业界热议,尤其关注白电产品与大模型结合的意义。不同于传统空调简单的温度设定,美的鲜净感空气机T6能够理解更复杂、更模糊的指令,并根据家庭环境智能调节湿度等,显着提升用户体验。

2025年最佳10个最佳免费反向链接检查器工具2025年最佳10个最佳免费反向链接检查器工具Mar 21, 2025 am 08:28 AM

网站建设只是第一步:SEO与反向链接的重要性 建立网站只是将其转化为宝贵营销资产的第一步。您需要进行SEO优化,以提高网站在搜索引擎中的可见度,吸引潜在客户。反向链接是提升网站排名的关键,它向谷歌和其他搜索引擎表明您的网站权威性和可信度。 并非所有反向链接都有利:识别并避免有害链接 并非所有反向链接都有益。有害链接会损害您的排名。优秀的免费反向链接检查工具可以监控链接到您网站的来源,并提醒您注意有害链接。此外,您还可以分析竞争对手的链接策略,从中学习借鉴。 免费反向链接检查工具:您的SEO情报员

百度又一国民产品接入DeepSeek,是想开了还是跟风?百度又一国民产品接入DeepSeek,是想开了还是跟风?Mar 12, 2025 pm 01:48 PM

DeepSeek-R1赋能百度文库与网盘:深度思考与行动的完美融合短短一个月内,DeepSeek-R1已迅速融入众多平台。百度凭借大胆的战略布局,将DeepSeek作为第三方模型伙伴,整合进自身生态系统,这标志着其“大模型 搜索”生态战略的重大进展。百度搜索和文心智能体平台率先接入DeepSeek及文心大模型的深度搜索功能,为用户提供免费的AI搜索体验。同时,“百度一下,你就知道”的经典slogan回归,新版百度APP也整合了文心大模型和DeepSeek的能力,推出“AI搜索”、“全网信息提炼”

及时的网络开发工程及时的网络开发工程Mar 09, 2025 am 08:27 AM

AI及时工程代码生成:开发人员指南 代码开发的景观有望进行重大转变。 掌握大型语言模型(LLM)和及时工程对于未来几年对开发人员至关重要。 Th

使用GO构建网络漏洞扫描仪使用GO构建网络漏洞扫描仪Apr 01, 2025 am 08:27 AM

此基于GO的网络漏洞扫描仪有效地确定了潜在的安全弱点。 它利用了GO的并发功能的速度功能,包括服务检测和漏洞匹配。让我们探索它的能力和道德

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!