2017-09-20 4 views
2

ユーザーがJavascriptを使ってどれくらいの時間を過ごしたかを知るための答えを見たことがありますが、JSに関する知識は不足しています(JSをPython/Flaskフレームワークに統合することはあまりありません)。Python/Flask:ユーザーがページに費やす時間を知る方法を教えてください。

私の目的は、ユーザーがデータを入力できるWebアプリケーションを作成することです。タスクの実行に費やされた時間(1日のうちの時間と何時何時)が記録されます。

私は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エントリ/行に書き込んで、フォームが検証されたときに同じ行に入力する方法を見つけようとしていましたが、同じ行に2回書き込む方法はわかりません。おそらくプライマリキーとそれらをリンクして何か?私はこれを調査し続けます。

このページが読み込まれる日時を保存して、フォームが送信された時間と比較できるようにしたいと思います。 javascriptなしでこれを達成するための簡単な方法はありますか?

+0

jqueryを使用すると、カウンタのカウントを開始し、その結果をフォームで送信できます。 – senaps

+0

@senaps:私はそれを試みますが、私は実際にジョブがいつ行われているかを見るために開始と停止のタイムスタンプも望みました。私は終了時間を記録し、記録された時間を引くことができると思いますか?面白いですが、うまくいくかもしれません。返信いただきありがとうございます。 –

+0

私はTimeMe.JS(https://github.com/jasonzissman/TimeMe.js)ライブラリを使用して、ユーザーがページの所要時間を計測することを検討していますが、ユーザーがページを開いている間も実行を継続するように設定する必要があります最小化/別のタブに行くか、これを行う同様のライブラリを見つける。 –

答えて

1

Flaskセッションを使用して開始時間を追跡できます。ブラウザのクッキーの上に実装されています。

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():この変数は、の範囲にローカルになり

  • 関数が完了した後でも変数が残っていない場合でも、関数が完了した後で変数がローカルでない場合でも、同じ関数がGETとPOSTの両方で呼び出されているため、ユーザー投稿フォーム

の注意すべきもう一つは、あなたのプログラムがnullの開始時刻を処理する方法を検討する必要がありますので、あなたは、JavaScriptを許可したり、クッキーを使用することにして、ユーザーを信頼することはできませんということであるときrriddenデータベースに格納されます。

+0

これは私が必要としていたものです!開始時刻と終了時刻は完全に記録されています。私はこれをJSと混乱させる必要はありません。私はあなたの助けに感謝、応答のおかげで。 –

関連する問題