一、观察以下代码
以下来自 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个分支。
二、通过字典来实现请求与处理函数之间的映射