我在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。
其他路线工作正常,所以这是一个问题。我在这里做错了什么?
答案 0 :(得分: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
指向相同的资源。为什么它不处理负值不太清楚。
答案 1 :(得分:11)
由于内置的FloatConverter只能处理正数,我将坐标作为字符串传递,并使用Python的float()方法将它们转换为浮点数。
答案 2 :(得分:0)
从Werkzeug 0.15开始,built-in float converter具有一个signed=True
参数,您可以使用此参数:
@app.route('/nearby/<float(signed=True):lat>/<float(signed=True):long>')