Flask路由在URL中给出404浮点数

问题描述 投票:9回答:3

我在Flask应用程序的server.py中有以下路由定义:

@app.route('/nearby/<float:lat>/<float:long>')
def nearby(lat, long):
    for truck in db.trucks.find({'loc': {'$near': [lat, long]}}).limit(5):
        if truck.has_key('loc'):
            del truck['loc']
    return json.dumps(trucks)

但是当我去http://localhost:5000/nearby/37.7909470419234/-122.398633589404时,我得到了404。

其他路线工作正常,所以这是一个问题。我在这做错了什么?

python routes flask http-status-code-404 werkzeug
3个回答
20
投票

内置的FloatConverter不处理负数。编写自定义转换器来处理负片。此转换器还将整数视为浮点数,它也会失败。

from werkzeug.routing import FloatConverter as BaseFloatConverter

class FloatConverter(BaseFloatConverter):
    regex = r'-?\d+(\.\d+)?'

# before routes are registered
app.url_map.converters['float'] = FloatConverter

内置不处理整数,因为那时/1/1.0将指向相同的资源。为什么它不处理负值不太清楚。


11
投票

由于内置的​​FloatConverter只能处理正数,我将坐标作为字符串传递,并使用Python的float()方法将它们转换为浮点数。


0
投票

从Werkzeug 0.15开始,built-in float converter有一个signed=True参数,你可以用它:

@app.route('/nearby/<float(signed=True):lat>/<float(signed=True):long>')
© www.soinside.com 2019 - 2024. All rights reserved.