Flask源码剖析(二):路由原理

本文继续探讨Flask源码,重点关注路由原理。通过endpoint理解路由与视图函数的关联,详细剖析路由匹配过程,包括dispatch_request()方法、RequestContext、MapAdapter的match()方法。文章总结了Flask路由注册、匹配和调用视图函数的流程。
摘要由CSDN通过智能技术生成

前言

在上一篇中,从最简单使用形式入手,简单的过了一遍Flask应用启动流程以及其背后的原理,本篇将会以类似的风格剖析Flask路由相关的内容,同样不会涉及过多细节,力求从较高的维度去看。

Flask版本:1.0.2

endpoint端点

回归一下上一篇文章,在通过@app.route()装饰器将函数转为Flask视图函数时,多次提及了endpoint,对应的add_url_rule()代码如下。

# flask/app.py/Flask

def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
    methods = options.pop('methods', None)
    rule = self.url_rule_class(rule, methods=methods, **options)
    self.url_map.add(rule)
    if view_func is not None:
        old_func = self.view_functions.get(endpoint)
        if old_func is not None and old_func != view_func:
            raise AssertionError('View function mapping is overwriting an '
                                 'existing endpoint function: %s' % endpoint)
        self.view_functions[endpoint] = view_func

在add_url_rule()方法中通过endpoint,将路由与视图函数关联在一起,为什么不直接将路由与视图函数关联?要多弄个endpoint?

为了回答这个问题,先来了解一下endpoint。

通常,可以通过两种方式将路由与视图函数关联。

@app.route('/hello/<name>')
def hello(name):
    return f'Hello, {name}!'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值