我正在开发一个Web应用程序(使用Python& Bottle)并构建一个装饰器来验证在GET或POST中发送的HTTP参数。早期版本需要使用callables,所以:
@params(user_id=int, user_name=unicode)
...确保user_id是一个int,user_name是一个字符串,并且两个字段都存在。
但这还不够。我希望能够指定user_name是可选的,或者它必须是非空的并且在40个字符以内。实现这很容易,但我正在努力使用最优雅的语法。看起来这可能是某人以前解决过的问题,但我找不到答案。具体来说,我想知道是否有一种优雅的方式来采用提供语法的可解析字符串。类似的东西:
@params(user_id='int:min1', user_name='unicode:required:max40')
我只是想在某个地方漂浮一个好的语法时发明一个语法。
有人见过这样的东西吗?用任何语言......但我特别重视简洁性和可读性。
答案 0 :(得分:2)
您可以使用列表。
@validate(user_id=[int, min(1)], user_name=[unicode,required,max(40)])
每个项目可以是一个函数(或类/对象),它以相应的字段作为参数执行。如果它引发错误,则验证失败。