flask源码阅读笔记(4)-路由实现分析

本文详细介绍了Flask框架中的路由机制,包括基础路由和复杂路由的实现方式,以及如何使用装饰器和函数进行路由规则的定义。

一、url路由实现

1.基础路由

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

分析装饰器源码:

    def route(self, rule, **options):
        def decorator(f):
            endpoint = options.pop('endpoint', None)
            self.add_url_rule(rule, endpoint, f, **options)
            return f
        return decorator

通过这个装饰器将view function注册到url。(url-route-registrations)。

代码注释提及:

        # Basically this example::

            @app.route('/')
            def index():
                pass

        # Is equivalent to the following::

            def index():
                pass
            app.add_url_rule('/', 'index', index)

2.复杂路由

# 官方demo:

@app.route('/')
def index():
    pass

@app.route('/<username>')
def show_user(username):
    pass

@app.route('/post/<int:post_id>')
def show_post(post_id):
    pass

@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
    pass

二、总结

1.

在路由系统中定义规则可以的方法可以概括为三种:

  • 使用 flask.Flask.route() 装饰器
  • 使用 flask.Flask.add_url_rule() 函数
  • 直接访问暴露为 flask.Flask.url_map 的底层的 Werkzeug 路由系统(不推荐)

2. route() 和 add_url_rule() 接受的参数

参数名解释
ruleURL 规则的字符串
endpoint注册的 URL 规则的末端。如果没有显式地规定,Flask 本身假设末端的名称是视图函数的名称,。
view_func当请求呈递到给定的末端时调用的函数。如果没有提供,可以在用在 view_functions 字典中以末端作为键名存储,来在之后设定函数。
defaults规则默认值的字典。上面的示例介绍了默认值如何工作。
subdomain当使用子域名匹配的时候,为子域名设定规则。如果没有给定,假定为默认的子域名。
**options这些选项会被推送给底层的 Rule 对象。一个 Werkzeug 的变化是 method 选项的处理。methods是这个规则被限定的方法列表( GET , POST 等等)。默认情况下,规则只监听 GET (也隐式地监听 HEAD )。从 Flask 0.6 开始,OPTIONS 也被隐式地加入,并且做标准的请求处理。 它们需要作为关键字参数来给定。

查看当前app的路由情况

>>> app.url_map

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值