Найти - Пользователи
Полная версия: Функция возвращает старые данные
Начало » Python для новичков » Функция возвращает старые данные
1
tomahawk
Доброго всем дня! Растолкуйте пожалуйста, в чем трабл:
есть модуль, который возвращает список о текущей погоде. Вот эго функция.
 def weatherfunc():
    data = []
    data.append(sity)
    data.append(w.wind())
    data.append(w.humidity)
    data.append(w.temperature('celsius'))
    data.append(w.detailed_status)
    data.append(w.rain)
    data.append(w.heat_index)
    data.append(w.clouds)
    data.append(date.today())
    icon = status()
    data.append(icon)
    dir = direction()
    data.append(dir)
    speed = 10/w.wind().get('speed')
    data.append(str(speed)+'s')
    return data

Дальше есть главный модуль приложения Flask с функцией отображения погоды
 @app.route("/weather", methods=['POST', 'GET'])
def weather():
    from weather import weatherfunc
 
    data = weatherfunc()
    queryString_cur = """SELECT round((temp0+temp1+temp2)/3, 1), 
                                        baro, 
                                        round((gydro0+gydro1+gydro2)/3, 1),
                                        round((temp4)/2, 1), 
                                        round((gydro4)/2, 1)
                                        FROM avg_sensors ORDER BY id DESC LIMIT 1"""
    temp_sensorsLast_cur = SQLfunction.sqlfuncselect(queryString=queryString_cur)
    return render_template('weather.html', version=version, data=data, temp_sensorsLast_cur=temp_sensorsLast_cur)
Работает. Но, при перезагрузке страницы показываются старые данные, т.е. инфо о погоде за время запуска приложения. Если приложение перезапустить, данные обновляются, и потом все по кругу. Как сделать, чтобы при обновлении страницы функция weatherfunc() давала свежие данные? Заранее спасибо!
marvellik
функция тут не при чем. она записывает в список данные из глобальной области а там возможно они у вас и не обновляются
 def weatherfunc():
    data = []
    data.append(sity)
    return data              
              
sity = 'oooo'
for _ in range(5):
    print(weatherfunc())
#  и когда sity обновляется
for i in range(5):
    sity = i
    print(weatherfunc())
xam1816
tomahawk
Как сделать, чтобы при обновлении страницы функция weatherfunc() давала свежие данные? Заранее спасибо!
свежие данные должны быть в в непонятной w из которой берутся к примеру temperature('celsius'),каким методом в этой w они обновляются?
tomahawk
Вот весь модуль weather.py
 from pyowm import OWM
from datetime import date
from pyowm.utils.config import get_default_config
from options import weatherAPItoken
sity = 'Odesa, UA'
config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM(weatherAPItoken, config_dict)
mgr = owm.weather_manager()
observation = mgr.weather_at_place(sity)
w = observation.weather
def direction():
    if 0 < w.wind().get('deg') < 30:
        direction = 'южное'
    elif 30 <= w.wind().get('deg') < 60:
        direction = 'юго-восточное'
    elif 60 <= w.wind().get('deg') < 120:
        direction = 'восточное'
    elif 120 <= w.wind().get('deg') < 150:
        direction = 'северо-восточное'
    elif 150 <= w.wind().get('deg') < 210:
        direction = 'северное'
    elif 210 <= w.wind().get('deg') < 240:
        direction = 'северо-западное'
    elif 240 <= w.wind().get('deg') < 300:
        direction = 'западное'
    elif 300 <= w.wind().get('deg') < 330:
        direction = 'юго-западное'
    else:
        direction = 'южное'
    return direction
def status():
    if w.detailed_status == 'ясно':
        widget = '''<div class="icon sunny"><div class="sun"><div class="rays"></div></div></div>'''
    elif w.detailed_status == 'пасмурно':
        widget = '''<div class="icon cloudy"><div class="cloud"></div><div class="cloud"></div></div>'''
    elif w.detailed_status == 'небольшой дождь':
        widget = '''<div class="icon rainy">
                        <div class="cloud"></div>
                        <div class="rain"></div></div>'''
    elif w.detailed_status == 'небольшая морось':
        widget = '''<div class="icon rainy">
                        <div class="cloud"></div>
                        <div class="rain"></div></div>'''
    elif w.detailed_status == 'снег':
        widget = '''<div class="icon flurries">
                        <div class="cloud"></div>
                        <div class="snow">
                        <div class="flake"></div>
                    <div class="flake"></div></div></div>'''
    elif w.detailed_status == 'небольшой снег':
        widget = '''<div class="icon flurries">
                        <div class="cloud"></div>
                        <div class="snow">
                        <div class="flake"></div>
                    <div class="flake"></div></div></div>'''
    elif w.detailed_status == 'плотный туман':
        widget = '''<div class="icon rainy">
                      <div class="cloud"></div>
                      <div class="fog"></div>
                    </div>'''
    elif w.detailed_status == 'туман':
        widget = '''<div class="icon rainy">
                      <div class="cloud"></div>
                      <div class="fog"></div>
                    </div>'''
    elif w.detailed_status == 'переменная облачность':
        widget = '''<div class="icon cloudy"><div class="cloud"></div><div class="cloud"></div></div>'''
    elif w.detailed_status == 'облачно с прояснениями':
        widget = '''<div class="icon cloudy"><div class="cloud"></div><div class="cloud"></div></div>'''
    else:
        widget = ''''''
    return widget
def weatherfunc():
    data = []
    data.append(sity)
    data.append(w.wind())
    data.append(w.humidity)
    data.append(w.temperature('celsius'))
    data.append(w.detailed_status)
    data.append(w.rain)
    data.append(w.heat_index)
    data.append(w.clouds)
    data.append(date.today())
    data.append(status())
    data.append(direction())
    speed = 10/w.wind().get('speed')
    data.append(str(speed)+'s')
    return data
if __name__ == '__main__':
    weatherfunc()
xam1816
Скорее всего вот здесь приходят данные,
 observation = mgr.weather_at_place(sity)
Ее нужно обновлять в функции в flask
tomahawk
xam1816
Скорее всего вот здесь приходят данные,
Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB