现在,你应该很兴奋。运行应用程序只需 3 行?那一定是某种记录(除了 PHP,因为 mod_php 是作弊的)。我敢打赌,你只是想知道更多。

那么 WSGI 应用程序的基本部分是什么?

  • WSGI 应用程序是 Python_可调用_的,例如函数、类或具有__call__方法的类实例

  • 应用程序可调用必须接受两个参数:environ,它是一个包含请求数据的 Python 字典,以及start_fn,它本身是可调用的。

  • 应用程序必须start_fn使用两个参数调用:状态代码(作为字符串)和表示为 2 元组的标头列表。

  • 应用程序返回一个包含响应正文中字节的可迭代对象,以方便的、可流式传输的块形式——在本例中,是一个仅包含"Hello, World!". (如果app是一个类,这可以在__iter__方法中完成。)

举例来说,接下来的两个例子与第一个例子是等价的:

class app(object):

def init(self, environ, start_fn):

self.environ = environ

self.start_fn = start_fn

def iter(self):

self.start_fn(‘200 OK’, [(‘Content-Type’, ‘text/plain’)])

yield “Hello World!\n”

class Application(object):

def call(self, environ, start_fn):

start_fn(‘200 OK’, [(‘Content-Type’, ‘text/plain’)])

yield “Hello World!\n”

app = Application()

您可能已经在考虑使用这些信息的方法,但最相关的方法可能是编写中间件。

让它变得活泼起来


中间件是扩展 WSGI 应用程序功能的一种简单方法。由于您只需要提供一个可调用对象,因此您可以随意将其包装在其他函数中。

例如,假设我们要检查environ. 我们可以轻松地创建一个中间件来执行此操作,如下例所示:

import pprint

def handler(environ, start_fn):

start_fn(‘200 OK’, [(‘Content-Type’, ‘text/plain’)])

return [“Hello World!\n”]

def log_environ(handler):

def _inner(environ, start_fn):

pprint.pprint(environ)

return handler(environ, start_fn)

return _inner

app = log_environ(handler)

这里,log_environ是一个返回函数的函数,它environ在推迟到原始回调之前漂亮地打印参数。

以这种方式编写中间件的好处是中间件和处理程序不必相互了解或关心。例如,您可以轻松地log_environ连接到Flask应用程序,因为 Flask 应用程序是 WSGI 应用程序。

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

import pprint

def handle_error(handler):

def _inner(environ, start_fn):

try:

return handler(environ, start_fn)

except Exception as e:

print e # Log error

start_fn(‘500 Server Error’, [(‘Content-Type’, ‘text/plain’)])

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐