内容简介:本文参考了:想要理解wsgi,首先得区分一个概念:server 和 app。此图来源于:
本文参考了:
- Wikipedia : Web Server Gateway Interface
- WSGI: The Server-Application Interface for Python
- wsgi.tutorial.codepoint.net/intro
- flask 源码解析:应用启动流程
想要理解wsgi,首先得区分一个概念:server 和 app。
此图来源于: www.toptal.com/python/pyth…
uwsgi、gunicorn是 server,我们写的 django、flask、sanic 程序是 app。app 就是一个可被调用的对象(callable object),server 会解析请求数据传给 app,app 运行业务逻辑之后,把结果返回给 server。
现实生活中,我们部署的时候,可能还会在 server 前面加上一个 nginx,所以整个流程简单来说是这样的:
app 可嵌套 -> 中间件
app 是一个可调用对象,这意味着我可以在 app1里面调用 app2,app2里面再调用 app3,这样一层一层嵌套下去。这不就是 middleware 吗?
如果你看过 django middleware 的源码,会看到 MiddlewareMixin
这个类:
class MiddlewareMixin: def __init__(self, get_response=None): self.get_response = get_response super().__init__() def __call__(self, request): response = None if hasattr(self, 'process_request'): response = self.process_request(request) response = response or self.get_response(request) if hasattr(self, 'process_response'): response = self.process_response(request, response) return response 复制代码
定义了一个 __call__
方法,它是一个可调用对象。
你在 django 配置文件中定义的:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] 复制代码
运行的时候,就是这样一个一个地调用 middleware,直到调用到你的业务逻辑代码(最终的 app 部分)。
后面会再详细讲讲中间件开发。
app向server暴露的接口
app 是一个可调用的对象,它需要接收一些参数,具体如下:
def app(environ,start_response): pass 复制代码
具体看一下这两个参数:
- environ,就是一个保护请求信息的字典。
比如 server 收到 GET http://localhost:8000/auth?user=obiwan&token=123
这条请求后,会生成下面这样一个 environ 字典:
这里面包含了此次请求的所有必要信息,通过这个字典,app就能知道这次请求的 path 是 /auth
,于是就知道该调用哪个 handler 函数。还能通过 HTTP_COOKIE知道 cookie 值,然后可以定位到具体的用户。
- start_response(status, headers,errors)
Server 传给 app 的回调函数,返回数据给 server 之前需要先调用这个回调函数,通知 server 你该来获取返回数据了。
听说这个参数实已经快有被废弃了,不需要完全了解。下图来源于: WSGI: The Server-Application Interface for Python 底部评论区。
如果你像我一样真正热爱计算机科学,喜欢研究底层逻辑,欢迎关注我的微信公众号:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 应用开发 —— 从 Authing 开始
- 成为物联网开发人员:从哪里开始
- 从零开始学习比特币开发:生成地址
- 从零开始搭建一个react项目开发
- 从零开始开发一个react脚手架(五)
- 从零开始构建Flink开发项目-Scala版
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高性能JavaScript
【美】Nicholas C. Zakas(尼古拉斯.泽卡斯) / 丁琛 / 电子工业出版社 / 2015-8-1 / 65
如果你使用 JavaScript 构建交互丰富的 Web 应用,那么 JavaScript 代码可能是造成你的Web应用速度变慢的主要原因。《高性能JavaScript》揭示的技术和策略能帮助你在开发过程中消除性能瓶颈。你将会了解如何提升各方面的性能,包括代码的加载、运行、DOM 交互、页面生存周期等。雅虎的前端工程师 Nicholas C. Zakas 和其他五位 JavaScript 专家介绍......一起来看看 《高性能JavaScript》 这本书的介绍吧!