PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Python/Flask:come sapere quanto tempo trascorre un utente su una pagina? (App di immissione dati/diario orario)

È possibile utilizzare una sessione Flask per tenere traccia dell'ora di inizio. È implementato sopra i cookie del browser.

http://flask.pocoo.org/docs/0.12/quickstart/#sessions

Devi implementare una chiave segreta per l'app (come mostrato nell'esempio di avvio rapido), quindi puoi utilizzare la session oggetto come archivio di valori chiave per informazioni specifiche dell'utente.

Per il tuo caso d'uso particolare, potrebbe essere qualcosa del tipo:

@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() prima che la convalida del modulo non funzionasse perché:

  • questa variabile sarebbe locale nell'ambito della funzione e non persisterebbe dopo il completamento della funzione
  • anche se la variabile non fosse locale nell'ambito della chiamata di funzione, la stessa funzione viene chiamata sia per GET che per POST, quindi verrebbe sovrascritta quando l'utente pubblica il modulo

Un'altra cosa da tenere presente è che non puoi fidarti che l'utente utilizzi i cookie o permetta JavaScript, quindi dovresti considerare come il tuo programma gestirebbe i tempi di inizio nulli nel database.