我的bottle
网络服务器提供多种服务(路由)。其中一些必须限制为私人(RFC1918)IP,而其他人则同时服务于私人和公共IP。
现在我在路线的开头检查
if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
# code for private service
我需要检查每个限制为私有IP的路由(10个案例并且不断增长),并且不需要为私有IP和公共IP(1个案例)执行此操作。
是否有可以添加此决策树的路线的全局过滤器?
我在python应用程序中专门寻找一种方法,而不是通过例如上游过滤反向代理。
答案 0 :(得分:2)
我不知道内置任何内容,但你可以使用decorator来做到这一点。从装饰器返回一个包装器,它执行IP类型的检查,如果检查通过则返回常规视图,否则返回错误消息(或类似)。 以下应该有效:
def private_only(route):
def wrapper(*args, **kwargs):
if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
return route(*args, **kwargs)
else:
return "Not allowed!"
return wrapper
然后用它装饰你的私人观点:
@route('/my/internal/route')
@private_only
def internal_view():
return some_data()