Puede usar una sesión de Flask para realizar un seguimiento de la hora de inicio. Se implementa sobre las cookies del navegador.
http://flask.pocoo.org/docs/0.12/quickstart/#sessions
Debe implementar una clave secreta para la aplicación (como se muestra en el ejemplo de inicio rápido), y luego puede usar la session
objeto como almacén de valor clave para información específica del usuario.
Para su caso de uso particular, podría ser algo como:
@app.route('/logpage', methods=['GET', 'POST'])
@login_required
def logpage():
form = LogForm()
if form.validate_on_submit():
entry = LogData(sessionid=form.sessionid.data, user_id=current_user.get_id(),
starttime=session.pop('start_time', None), endtime=datetime.utcnow())
db.session.add(entry)
db.session.commit()
return redirect(url_for('home'))
session['start_time'] = datetime.utcnow()
return render_template('logpage.html', form=form)
pageload = datetime.utcnow()
antes de que la validación del formulario no funcionara porque:
- esta variable sería local para el alcance de la función y no persistiría después de que se complete la función
- incluso si la variable no fuera local para el alcance de la llamada a la función, se llama a la misma función tanto para GET como para POST, por lo que se anularía cuando el usuario publique el formulario
Una cosa más a tener en cuenta es que no puede confiar en que el usuario use cookies o permita JavaScript, por lo que debe considerar cómo su programa manejaría los tiempos de inicio nulos en la base de datos.