零长度网址细分

时间:2013-05-17 12:37:10

标签: python-2.7 flask werkzeug

使用最新版本的Flask和Flask-RESTful,我有一些非常基本的路由定义如下:

def build_uri_rules(uri_map):
    for cls, uri in uri_map.iteritems():
        api.add_resource(cls, uri)


uris = {
    SampleController: '/samples/<string:hash_or_id>',
    SampleFamilyController: '/samples/<string:hash_or_id>/family',
}

build_uri_rules(uris)

这适用于'正确'请求的uris,但是如果在没有参数的情况下命中/ samples /端点,或者使用空样本ID命中样本*族端点怎么办?目前,这会导致404错误。这很好用,但我相信这里正确的做法是抛出一个400错误,因为他们发现了一个正确的URL,但他们的数据结构不正确。有没有办法可以强迫这种行为?

作为旁注: 通过Werkzeug文档,我看到werkzeug.routing允许某些url参数的最小长度,但我也看到它至少有1个。不可否认,我不知道为什么会这样,但是这个是正确的树吠?或者我应该简单地创建一个全局404处理程序来检查参数的长度并从那里引发正确的错误?

谢谢!

已编辑:代码正确无误。

1 个答案:

答案 0 :(得分:1)

我会说,点击/samples//samples/family(或甚至/samples//family应该会产生404,因为该端点没有任何内容。

但是,如果您不想这样做,处理它的最简单方法是为 /samples//samples/family创建一个404处理程序,它返回一个注释有关API的消费者最有可能出错的更多信息。

uris = {
    Explanitory400Controller: '/samples/',
    SampleController: '/samples/<string:hash_or_id>',
    Explanitory400Controller: '/samples/family',
    SampleFamilyController: '/samples/<string:hash_or_id>/family',
}