Flask源码简析

Flask 0.1版本的代码很简洁,加上注释只有600多行。本文以 0.1版本为例,简单探讨一下Flask 的实现。

一、Werkzug

Flask源码简短,主要原因之一是,下层的 Werkzug 库完成了大部分的工作。Werkzug 是一个用于实现 WSGI (什么是wsgi)应用的工具集。我们来看一下如何用werkzug来实现一个简易的web应用。

1.Response与Request
from werkzeug.wrappers import Request, Response

Request 类是对WSGI 传入的 environ参数的封装,包含了HTTP请求的各种属性,如method、header、path 等等。Response 类则相反,是对返回数据的封装,比如我们返回一个“Hello World”:

response = Response("Hello World\n")

按照WSGI的要求,Web应用必须回调传入的start_response参数;这里Response 类已经帮我们做好这件事了:

    def __call__(self, environ, start_response):
        """Process this response as WSGI application.
        :param environ: the WSGI environment.
        :param start_response: the response callable provided by the WSGI
                               server.
        :return: an application iterator
        """
        app_iter, status, headers = self.get_wsgi_response(environ)
        start_response(status, headers)  # 回调
        return app_iter

同时,由于实现了__call__方法,可见Response 也是可调用对象。

2.一个简单的Web应用

我们来用Werkzug构建一个Web应用:

class WebApp:
    def __init__(self):
        self.url_map = Map([Rule('/hello', endpoint='hello')])
        
    def __call__(self, environ, start_response):
        adapter = self.url_map.bind_to_environ(environ)
        endpoint, args = adapter.match(path_info="/hello", method="GET")
        request = Request(environ)
        if request.method == 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值