如何通过瓶中路由过滤IP地址?

时间:2015-12-28 16:09:01

标签: python bottle

我的bottle网络服务器提供多种服务(路由)。其中一些必须限制为私人(RFC1918)IP,而其他人则同时服务于私人和公共IP。

现在我在路线的开头检查

if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
    # code for private service

我需要检查每个限制为私有IP的路由(10个案例并且不断增长),并且不需要为私有IP和公共IP(1个案例)执行此操作。

是否有可以添加此决策树的路线的全局过滤器?

我在python应用程序中专门寻找一种方法,而不是通过例如上游过滤反向代理。

1 个答案:

答案 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()