Sie können eine Flask-Sitzung verwenden, um die Startzeit zu verfolgen. Es wird zusätzlich zu Browser-Cookies implementiert.
http://flask.pocoo.org/docs/0.12/quickstart/#sessions
Sie müssen einen geheimen Schlüssel für die App implementieren (wie im Schnellstartbeispiel gezeigt), und dann können Sie die session
verwenden Objekt als Schlüsselwertspeicher für benutzerspezifische Informationen.
Für Ihren speziellen Anwendungsfall könnte es so aussehen:
@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()
vorher hat die Formularvalidierung nicht funktioniert, weil:
- diese Variable wäre lokal für den Gültigkeitsbereich der Funktion und würde nach Abschluss der Funktion nicht bestehen bleiben
- selbst wenn die Variable nicht lokal zum Gültigkeitsbereich des Funktionsaufrufs wäre, wird dieselbe Funktion sowohl für GET als auch für POST aufgerufen, sodass sie überschrieben würde, wenn der Benutzer das Formular abschickt
Eine weitere Sache, der Sie sich bewusst sein sollten, ist, dass Sie nicht darauf vertrauen können, dass der Benutzer Cookies verwendet oder JavaScript zulässt, also sollten Sie überlegen, wie Ihr Programm mit null Startzeiten in der Datenbank umgehen würde.