Python 瓶子:全局路由过滤器

Python 瓶子:全局路由过滤器,python,routes,bottle,Python,Routes,Bottle,我正在使用瓶子作为一个简单的应用程序,它可以显示日历,并允许用户指定年份和月份。定义了以下路线: “/”#本年度和本月 “/year”#年份和当月 “/年/月”#年和月 但是,末端有额外/的路线不会被识别。例如,“/2015”可以,但“/2015/”不行。为了克服这个问题,我使用了正则表达式。这是可行的,但让我为每个路由定义一个模式,然后显式检查路由是否以“/”结尾。我想定义一个全局过滤器,从请求url的末尾删除额外的斜杠(如果存在) 从瓶子导入路线、运行、模板 导入日历 导入时间 CAL=ca

我正在使用瓶子作为一个简单的应用程序,它可以显示日历,并允许用户指定年份和月份。定义了以下路线:
“/”#本年度和本月
“/year”#年份和当月
“/年/月”#年和月

但是,末端有额外/的路线不会被识别。例如,“/2015”可以,但“/2015/”不行。为了克服这个问题,我使用了正则表达式。这是可行的,但让我为每个路由定义一个模式,然后显式检查路由是否以“/”结尾。我想定义一个全局过滤器,从请求url的末尾删除额外的斜杠(如果存在)

从瓶子导入路线、运行、模板
导入日历
导入时间
CAL=calendar.HTMLCalendar(calendar.SUNDAY)
Y、 M=time.strftime(“%Y%M”).split()
@路由(“/”)
@路由(“/”)
@路由(“/”)
def cal(年=Y,月=M):
y=年份,如果年份[-1]!='/'其他年份[:-1]
m=月份,如果月份[-1]!='/'其他月份[:-1]
返回模板(计算格式月份(整数(y)、整数(m)))
运行(host='localhost',port=8080,debug=True)

与其创建重复的路由,我建议强制使用以斜杠结尾的url的严格url模式,并鼓励客户端通过重定向不以斜杠结尾的url来使用它,例如使用以下路由:

@route('<path:re:.+[^/]$>')
def add_slash(path):
    return redirect(path + "/")
@路由(“”)
def添加_斜杠(路径):
返回重定向(路径+“/”)

(顺便说一句,这是django的)。

瓶子文档提到了你的问题,下面是他们的建议:

添加一个WSGI中间件,从所有URL中去除尾部斜杠

在请求之前添加一个
钩子来去除后面的斜杠


两者的示例可以是。

Thx!将
重定向
添加到导入HTTP代码301(永久重定向):
返回重定向(路径+'/',301)
@route('<path:re:.+[^/]$>')
def add_slash(path):
    return redirect(path + "/")