在烧瓶

时间:2015-09-03 07:32:54

标签: python-2.7 web flask

我想在会话中存储用户的位置坐标
我正在使用Flask Micro Framework。

    from flask import session as sess
    geolocator = GoogleV3()
    @app.route('/location', methods = ['POST'])
    def location():
          latitude = request.json['latitude']
          longitude = request.json['longitude']
          address = geolocator.reverse(str(latitude)+ "," + str(longitude),exactly_one = True)
          sess['lat'] = float(latitude)
          sess['long'] = float(longitude)

这是我为在会话中存储位置而编写的代码 我不认为这是正确的方法,因为我无法检索存储的数据,并且这些数据对于每个用户都不同,我使用此坐标进行进一步计算,即找到车库。
< br />以下是相同的代码。

    def find_garage():
          garageList = session.query(Garage)
          user_coords = (float(sess['lat']), float(sess['long']))
          for garage in garageList:
                d = haversine(user_coords,(float(garage.locationX),float(garage.locationY)))
                if d <= 0.5:
                    sess['garagename'] = garage.name
                    sess['garagecontact'] = garage.contactnumber
                    send_email("myemail@example.com","Location:",str(sess['garagename']))
                    break

一旦用户提交了有关所需服务类型的帖子请求,我就会运行此find_garage()方法。但我无法检索会话中存储的garagenamelat long我得到KeyError
也许这是因为刷新了。
请注意:我没有使用任何其他代码行来使用会话。

1 个答案:

答案 0 :(得分:0)

使用sess.get('lat',0)代替sess['lat']sess.get('long',0)代替sess['long'],因为在第一次调用find_garage时,会话字典可能为空。

如果密钥不在dict中,则dict的get方法返回0(可选的第二个参数,如果为空则返回None)。

如果未设置这两个键,请使用0或其他默认值。