0

Webサイトのダウンロードカウンターを統合しています。私の目的は、[ダウンロード]ボタンがクリックされてファイルがダウンロードされるたびにカウンターをトリガーすることです。ダウンロードボタンはここにあります:

<form action="download.py" method="post">
<input type="submit" value="Download" name="DL" onClick="download_file()"/>
</form>

クリックするとファイルがダウンロードされますが、ダウンロードカウンターもトリガーしたいと思います。

import cgi
form = cgi.FieldStorage()
def count():
    c.execute("INSERT INTO dl VALUES ('%d', '%s', '%s', '%s')" % (index, dt, ip, client))
    conn.commit()
    conn.close()

if "DL" in form:
    count()
    form.list = []

理論的には、これは機能しているように見えますが、ページが再ロードされてもcgi.FieldStorageはリセットされず、再ロードされるたびに、新しいダウンロードでDBがトリガーされます。これは発生しませんでした。

FieldStorageに保存されている値を完全にリセットまたは削除するにはどうすればよいですか?または、アドバイスできるより良い解決策はありますか。ありがとうございました!

4

1 に答える 1

0

私はグーグルのための解決策を残します。ファイルをダウンロードした人の最後のIPアドレスを確認して問題を分類しました。IPがユーザーが再度ダウンロードするのと同じである場合(ダウンロードの繰り返し、またはページの更新)、カウンターはトリガーされません。そのためのコードは以下のとおりです。

現在のIPを取得します。

ip = (getenv("HTTP_CLIENT_IP") or
getenv("HTTP_X_FORWARDED_FOR") or
getenv("REMOTE_ADDR") or
"UNKNOWN")

ファイルをダウンロードした最後のIPを取得します。

last_ip_raw = c.execute('SELECT ip FROM dl ORDER BY id DESC LIMIT 1')
last_ip_tup = c.fetchone()
last_ip = str("%s" % last_ip_tup)

すでにダウンロードされているかどうかを確認します。

def count():
        if last_ip != ip:
                c.execute("INSERT INTO dl VALUES ('%d', '%s', '%s', '%s')" % (index, dt, ip, client))
                conn.commit()
                conn.close()

私はそれが完璧ではないことを知っていますが、それは仕事をします。より良い提案は大歓迎です。

于 2013-03-23T16:21:07.403 に答える