PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Python/Flask:Como saber quanto tempo um usuário gasta em uma página? (Aplicativo de entrada de dados/registro de tempo)


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.