Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 22, 2021 16:34:54

tomahawk
Зарегистрирован: 2020-04-16
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает старые данные

Доброго всем дня! Растолкуйте пожалуйста, в чем трабл:
есть модуль, который возвращает список о текущей погоде. Вот эго функция.

 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() давала свежие данные? Заранее спасибо!

Отредактировано tomahawk (Фев. 22, 2021 16:38:15)

Офлайн

#2 Фев. 22, 2021 18:29:58

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Функция возвращает старые данные

функция тут не при чем. она записывает в список данные из глобальной области а там возможно они у вас и не обновляются

 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())

Отредактировано marvellik (Фев. 22, 2021 18:30:42)

Офлайн

#3 Фев. 22, 2021 18:42:05

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1370
Репутация: +  121  -
Профиль   Отправить e-mail  

Функция возвращает старые данные

tomahawk
Как сделать, чтобы при обновлении страницы функция weatherfunc() давала свежие данные? Заранее спасибо!
свежие данные должны быть в в непонятной w из которой берутся к примеру temperature('celsius'),каким методом в этой w они обновляются?

Офлайн

#4 Фев. 23, 2021 09:25:21

tomahawk
Зарегистрирован: 2020-04-16
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает старые данные

Вот весь модуль 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()

Офлайн

#5 Фев. 23, 2021 10:40:59

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1370
Репутация: +  121  -
Профиль   Отправить e-mail  

Функция возвращает старые данные

Скорее всего вот здесь приходят данные,

 observation = mgr.weather_at_place(sity)
Ее нужно обновлять в функции в flask

Офлайн

#6 Фев. 23, 2021 11:36:20

tomahawk
Зарегистрирован: 2020-04-16
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Функция возвращает старые данные

xam1816
Скорее всего вот здесь приходят данные,
Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version