我已经看到了使用Javascript查看用户在页面上花费多长时间的答案,但我对JS的了解却很少(更不用说将JS集成到我的Python / Flask框架中)。
我的目标是创建一个用户可以输入数据的Web应用程序,同时记录执行任务所花费的时间(持续时间和白天的时间)。
我使用Python,Flask,WTForms和SQLAlchemy来完成大部分功能。从我的views.py文件中,我已经配置了这个:
@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(), endtime=datetime.utcnow())
db.session.add(entry)
db.session.commit()
return redirect(url_for('home'))
return render_template('logpage.html', form=form)
当用户点击提交时,会话ID,用户ID和结束时间被记录到PostgreSQL服务器。我尝试在表单验证之前设置pageload = datetime.utcnow(),希望它能存储页面加载的时间,但它似乎与结束时间保存的时间相同。
我试图找出一种方法将当前日期时间写入SQL条目/行并在表单验证时进入同一行,但我不知道如何两次写入同一行。也许用主键和连接它们的东西?我会继续调查这个。
我想要一种方法来保存此页面加载的日期时间,以便将其与表单提交的时间进行比较。有没有一个直接的方法来实现这个没有JavaScript?
答案 0 :(得分:1)
您可以使用Flask会话来跟踪开始时间。它是在浏览器cookie之上实现的。
http://flask.pocoo.org/docs/0.12/quickstart/#sessions
您需要为应用程序实现密钥(如快速入门示例所示),然后您可以将session
对象用作用户特定信息的键值存储。
对于您的特定用例,它可能类似于:
@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()
没有效果,因为:
还有一点需要注意的是,您无法信任用户使用Cookie或允许使用JavaScript,因此您应该考虑您的程序如何处理数据库中的空启动时间。