Python mini框架-给框架添加路由功能

mini框架加路由

框架的回顾

URL-统一资源定位符 www.baidu.a/b/c.html
application函数的作用 解耦 框架的入口
字典-客户端解析出的资源路径
函数引用-传递回header内容

路由器回顾

数据发给路由器,路由器转发给其他网络,实现连接不同网络
请求数据发给框架,框架根据请求类型调用不同的处理函数

框架添加路由

添加路由的用途:根据请求不同,自动调用不同的功能
->功能选择处利用字典实现(手动添加字典)
->加装饰器(自动添加字典)

  • 将键(可能的请求路径)值(函数引用)放入字典
  • 自动添加字典-利用装饰器装饰时已经执行来先定义字典,但未执行装饰器
  • 调用字典内的函数引用,即利用映射,只利用了装饰器先执行,并没有调用装饰器->调用的是添加进字典的原函数引用,是字典内的函数引用,未调用装饰器装饰后的函数引用,(写全只是为了写通用装饰器)

->流程:

  • 利用带参数的装饰器添加字典的键值
  • 接收服务器的请求
  • 匹配请求与字典的键
  • 执行值()
    在这里插入图片描述
import re

URL_FUNC_DICT = dict()

def route(url):
    def set_func(func):
        # URL_FUNC_DICT["/index.py"] = index
        URL_FUNC_DICT[url] = func  # 向URL_FUNC_DICT字典中添加值
        def call_func(*args, **kwargs):  # call_func 并未执行
            return func(*args, **kwargs)
        return call_func
    return set_func


@route("/index.html")
def index():
    with open("./templates/index.html") as f:
        content = f.read()
    my_stock_info = "这是你的本月名称....."
    content = re.sub(r"\{%content%\}", my_stock_info, content)
    return content

def application(env, start_response):
    start_response('200 OK', [('Content-Type', 'text/html;charset=utf-8')])

    file_name = env['PATH_INFO']
    # file_name = "/index.py"
    
    try:
        # func = URL_FUNC_DICT[file_name]
        # return func()
        return URL_FUNC_DICT[file_name]() # 取出字典中的值,是添加进字典前原函数的引用
    except Exception as ret:
        return "产生了异常:%s" % str(ret)  # 若file_name没传值,为空,则会报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值