Flask框架Server和RequestHandler的爱恨纠缠

本文探讨了Flask框架的起源,由Armin Ronacher开发的wsgi库werkzeug和模板引擎jinja2构成。文章深入分析了从发起HTTP请求到响应的流程,涉及Flask、werkzeug及Python基本库的源代码,特别是`make_server`、`BaseHTTPServer`和`SocketServer`。重点解释了请求处理类的实例化和请求处理逻辑,包括`handle_request`和`wsgi_app`如何协同工作来匹配URL并执行视图函数。
摘要由CSDN通过智能技术生成

Flask

overview

背景

Flask以及它所使用的wsgi库werkzeug和模板引擎jinja2都是由Armin Ronacher和他的团队开发的。实际上Armin Ronacher早就开发出来了werkzeug开源库,旨在为框架封装一个良好的底层的API接口,但过了一段时间,Armin发现还是自己来先做一个吧,然后Flask就诞生了。

任务

分析从发起HTTP请求到响应请求之间的流程

涉及源代码文件:

  • Flask源码
    • app.py
  • werkzeug源码
    • serving.py
  • python基本库源码

    1. SocketServer.py
    2. BaseHTTPServer.py


先来看一个最小的Flask应用:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

显而易见,app.run是核心代码。我们来看一下app.py中相关的代码:

<app.py>
def run(self, host=None, port=None, debug=None, **options):
    from werkzeug.serving import run_simple
    run_simple(host, port, self, **options)

<serving.py>
def run_simple(hostname, port, application, ...,
           request_handler=None, static_files=None, ...):
   srv = make_server(hostname, port, application, threaded,
                      processes, request_handler,
                      passthrough_errors, ssl_context,
                      fd=fd)
   srv.serve_forever()

def make_server(host
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值