Bạn có thể sử dụng phiên Flask để theo dõi thời gian bắt đầu. Nó được triển khai trên cookie của trình duyệt.
http://flask.pocoo.org/docs/0.12/quickstart/#sessions
Bạn cần triển khai khóa bí mật cho ứng dụng (như được hiển thị trong ví dụ khởi động nhanh), sau đó bạn có thể sử dụng session
đối tượng như một kho lưu trữ giá trị chính cho thông tin người dùng cụ thể.
Đối với trường hợp sử dụng cụ thể của bạn, nó có thể giống như:
@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()
trước khi xác thực biểu mẫu không hoạt động vì:
- biến này sẽ là cục bộ đối với phạm vi của hàm và sẽ không tồn tại sau khi hàm hoàn thành
- ngay cả khi biến không cục bộ trong phạm vi của lệnh gọi hàm, thì cùng một hàm đang được gọi cho cả GET và POST, vì vậy nó sẽ bị ghi đè khi người dùng đăng biểu mẫu
Một điều nữa cần lưu ý là bạn không thể tin tưởng người dùng đang sử dụng cookie hoặc cho phép JavaScript, vì vậy bạn nên xem xét cách chương trình của bạn xử lý thời gian bắt đầu rỗng trong cơ sở dữ liệu.