【发布时间】:2014-06-03 13:18:47
【问题描述】:
我在第 9 行中遇到 key = re.findall(etc)[0] 的“列表索引超出范围错误”,我不知道为什么。我正在尝试做的是......对于路由,如果我给路由“/user//”我可以运行正则表达式 re.findall(r"", url) 这将返回列表 ['', ''] 这样我就可以放入我的路由表 {'/user' : ['name', 'page_num']}如果在浏览器中输入了 url '/user/Kyle/237',我可以看到 /user 在路由表中,它可以提供另外 2 件东西,因为在请求的 url 中的 /user 之后有 2 件东西' Kyle' 和 '237',所以在我的方法中,我会创建 2 个参数 'name' 和 'page_num',我可以看到 name 在路由中排在第一位,所以 name=Kyle 和 page_num 排在第二位,所以 page_num=237 并传递那些到我的方法,它将格式化并返回模板页面。
框架:
from wsgiref.simple_server import make_server
from wsgiref.util import setup_testing_defaults
import re
routing_table = {}
def route(url, func):
params = re.findall(r"<([a-zA-Z_][0-9]*)>", url)
key = re.findall(r"(.+?)/<[a-zA-Z_][a-zA-Z0-9_]*>", url)[0]
routing_table[key] = [params, func]
def find_path(url):
if url in routing_table:
return routing_table[url]
else:
return None
# This function is called each time the web server receives a request.
def app(environ, start_response):
setup_testing_defaults(environ)
handler = find_path(environ['PATH_INFO'])
if handler is None:
status = '404 Not Found'
body = "<html><body><h1>Page Not Found</h1></body></html>"
else:
status = '200 OK'
body = handler() #<--- call handler
headers = [('Content-type', 'text/html; charset=utf-8')]
start_response(status, headers)
return [body.encode("utf-8")]
def run(ip, port):
myserver = make_server(ip, port, app)
print("Serving glasses of wsgi at http://%s:%s" % (ip, port))
myserver.serve_forever()
应用程序:
import glass
def index():
return "This is the main page"
def hello():
return "hi, how are you?"
def page(page_id):
return "this is page %d" % page_id
def user(name, page_id):
return "Hello %d! This happens to be page %d" % name, page_id
if __name__ == '__main__':
glass.route("/", index)
glass.route("/hello", hello)
glass.route("/page/<page_id>", page)
glass.route("/user/<name>/<page_id>", user)
glass.run("127.0.0.1", 8000)
【问题讨论】:
标签: python list dynamic frameworks routing