WSGI 协议运行原理

0. 前言

基本概念:
WSGI:全称是Web Server Gateway InterfaceWSGI是一种规范,用来描述web server如何与web application通信的规范。serverapplication的规范在PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web serverweb application,当前运行在WSGI协议之上的web框架有 FlaskDjango等

WSGI协议主要包括serverapplication两部分:

  • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
  • WSGI application接收由server转发的request,处理请求,并将处理结果返回给serverapplication中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序(执行程序),对应用程序来说,中间件扮演服务器(WSGI服务器)。

WSGI协议其实是定义了一种serverapplication解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的serverapplication组合实现自己的web应用。例如uWSGIGunicorn都是实现了WSGI server协议的服务器,DjangoFlask是实现了WSGI application协议的web框架,可以根据项目实际情况搭配使用。


注:

  • 贴图代码都只是截取了关键入口的那部分关键语句和函数方法, 其他细节可看详细代码,我们把主流程走一遍就行了 。
  • 我每个标记了粉红色加粗文字的都是那一步或者几小步的主要工作,前面标了序号,完了可以把他们串联起来,就是一个完整的流程了。

一. 程序入口:runserver命令

python manage.py runserver 0.0.0.0:8000

注:runserver文件里的Command类继承了Django的BaseCommand,从而可以通过python manage.py <文件名> 运行该文件,命令运行的函数为handle()

文件地址:

/<我自己的虚拟环境地址>/lib/python3.7/site-packages/django/core/management/commands/runserver.py

注:可以找到文件从这里开始查看源码

  • <1>执行runserver命令handle()时调用run()方法:

  •  执行run()时调用inner_run()方法:

  • 执行inner_run()时<2>调用WSGI的入口函数run()
  • </
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值