Você pode usar uma sessão do Flask para rastrear a hora de início. É implementado em cima dos cookies do navegador.
http://flask.pocoo.org/docs/0.12/quickstart/#sessions
Você precisa implementar uma chave secreta para o aplicativo (como mostrado no exemplo de início rápido) e, em seguida, pode usar a
session
objeto como um armazenamento de valor-chave para informações específicas do usuário. Para o seu caso de uso específico, pode 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 da validação do formulário não funcionou porque:- essa variável seria local para o escopo da função e não persistiria após a conclusão da função
- mesmo que a variável não fosse local para o escopo da chamada da função, a mesma função está sendo chamada para GET e POST, então ela seria substituída quando o usuário postar o formulário
Mais uma coisa para estar ciente é que você não pode confiar no usuário para usar cookies ou permitir JavaScript, então você deve considerar como seu programa lidaria com tempos de início nulos no banco de dados.