flask源码分析

wsgi协议

关于wsgi协议就不赘述了,以下是最简单的符合wsgi的应用

def application(environ,star_response):
    star_response('200 OK',[('Content-Type','text/html')])
    return 'hello xy'

from wsgiref.simple_server import make_server
server = make_server('',8002,application)
server.serve_forever()

app attriabute

class Flask:
    def __init__(self, package_name):

        self.package_name = package_name
        self.root_path = _get_package_path(self.package_name)

        self.view_functions = {}
        self.error_handlers = {}
        self.before_request_funcs = []
        self.after_request_funcs = []
        self.url_map = Map()

app.run

函数栈调用如下:

app.run()
    run_simple()
        make_server()
            srv.serve_forever()

request handler

werkzug.serving.run_wsgi()
    execute()
        application_iter = app(environ, start_response)
            __call__()
            self.wsgi_app(environ, start_response)

                ctx = self.request_context(environ)
                ctx.push()
                response = self.full_dispatch_request()
                return response(environ, start_response)

full_dispatch_request

preprocess_request
dispatch_request
finalize_request

dispatch_request

def dispatch_request(self):
    """Does the request dispatching.  Matches the URL and returns the
    return value of the view or error handler.  This does not have to
    be a response object.  In order to convert the return value to a
    proper response object, call :func:`make_response`.
    """

    req = _request_ctx_stack.top.request
    if req.routing_exception is not None:
        self.raise_routing_exception(req)
    rule = req.url_rule

    # dispatch to the handler for that endpoint
    return self.view_functions[rule.endpoint](**req.view_args)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • flask源码分析 1. 前言 本文将基于flask 0.1版本(git checkout 8605cc3)来分析...
    甘尼克斯_阅读 2,757评论 1 0
  • [TOC]一直想做源码阅读这件事,总感觉难度太高时间太少,可望不可见。最近正好时间充裕,决定试试做一下,并记录一下...
    何柯君阅读 7,224评论 3 98
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,242评论 25 708
  • Refer to: www.threemeal.com/blog/12/ 中间件 中间件是一个钩子框架,它们可以介...
    兰山小亭阅读 16,563评论 9 165
  • 吃饭时儿子问我:“妈妈,你们小时候都吃什么点心和糖?最贵的冰棍多钱?” “我们小时候哪有什么点心,糖就是那种粘牙糖...
    李宇航妈妈阅读 142评论 0 2