Atualizando o cache do navegador no flask

Dec 13 2020

Eu tenho um pequeno servidor de flask que estou executando principalmente para experimentar e ferramentas que estou desenvolvendo para uso próprio (na minha rede doméstica). Ele está sendo executado no modo de desenvolvimento em uma máquina raspberry pi. Ele é configurado para iniciar na inicialização por meio de rc.local:

sudo -H -u pi /home/pi/Server/start.sh &

e o start.sharquivo lê

#!/bin/bash

cd /home/pi/Server
source /home/pi/Server/venv/bin/activate
export FLASK_APP=/home/pi/Server/app.py
export FLASK_ENV=development
export FLASK_RUN_HOST=192.168.1.104
export FLASK_RUN_PORT=5001

flask run

Nos primeiros dias, tudo estava funcionando bem, mas agora recebo o seguinte erro:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2291, in wsgi_app
    ctx.push()
  File "/usr/lib/python3/dist-packages/flask/ctx.py", line 377, in push
    self.app, self.request
  File "/usr/lib/python3/dist-packages/flask/sessions.py", line 343, in open_session
    data = s.loads(val, max_age=max_age)
  File "/usr/lib/python3/dist-packages/itsdangerous.py", line 643, in loads
    .unsign(s, max_age, return_timestamp=True)
  File "/usr/lib/python3/dist-packages/itsdangerous.py", line 466, in unsign
    return value, self.timestamp_to_datetime(timestamp)
  File "/usr/lib/python3/dist-packages/itsdangerous.py", line 404, in timestamp_to_datetime
    return datetime.utcfromtimestamp(ts + EPOCH)
OverflowError: timestamp out of range for platform time_t

Pelo que vejo aqui, esse é um problema de cache do navegador. Como posso dizer ao frasco para lidar com isso?

Respostas

1 KKS Dec 13 2020 at 13:49

Parece que você está usando sessões / cookies? Tente investigar isso, talvez a data não seja adequada ou inválida. Tente limpá-lo session.clear()ou use uma data de validade mais curta. Também tive problemas após a atualização do python 2 para o 3 que bagunçaram os cookies. Se você fez isso, é necessário limpar o cache para que os cookies de data / hora do python3 possam ser definidos.

Abdur-RahmaanJanhangeer Dec 13 2020 at 13:44

Isso parece ser um erro quando o tempo retornado é 0 desse problema de NTP do Adafruit CircuitPython . Uma abordagem direta seria corrigir algumas dependências do frasco com um PR.

No entanto, isso parece mais um erro com a idade do cache. Tente reduzir para um curto período de tempo

@app.after_request
def after_request(response):
    response.headers["Cache-Control"] = "max-age=300" # in second
    return response