ref*_*ark 5 python postgresql flask
我已经看到了使用 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 的直接方法可以完成此任务?
您可以使用 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,因此您应该考虑您的程序如何处理数据库中的空启动时间。
| 归档时间: | 
 | 
| 查看次数: | 2268 次 | 
| 最近记录: |