Python使用装饰器给Web框架添加路由功能

谁说我不能喝 提交于 2019-12-06 12:39:35

一、观察以下代码

以下来自 Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦) 中的mini_frame最后版本的代码:

import time


def index():
    with open("templates/index.html", 'rb') as f:
        content = f.read()
    return content.decode("utf-8")


def login():
    return "----login page----\r\n %s" % time.ctime()


def register():
    return "----register page----\r\n %s" % time.ctime()


def application(env, start_response):
    file_name = env['PATH_INFO']
    if file_name == '/login.py':
        start_response('200 OK', [('Content-Tpye', 'text/html')])
        return login()
    elif file_name == '/register.py':
        start_response('200 OK', [('Content-Tpye', 'text/html')])
        return register()
    elif file_name == '/index.py':
        start_response('200 OK', [('Content-Tpye', 'text/html')])
        return index()
    else:
        start_response('404 NOT FOUND', [])
        return "Not found page..."

我们可以看到,在前面的代码实现中,application函数中通过if...else判断来对用户的请求做判断,然后决定调用什么函数来进行处理。这是不合理的,如果支持100个请求,那么这样就需要些100个分支。

 

二、通过字典来实现请求与处理函数之间的映射

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!