2013-03-17 23 views
0

我正在爲我的網站集成一個下載計數器。我的目標是每次單擊「下載」按鈕並下載文件時觸發計數器。 的下載按鈕就在這裏:下載計數器:CGI FieldStorage重置按下按鈕值

<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不會被重置,並且每次重新加載時都會觸發數據庫,​​並且不會發生新的下載。

我該如何完全重置或刪除FieldStorage存儲的值?還是有更好的解決方案,你可以建議。謝謝!

回答

0

我會留下googlers的解決方案。我通過檢查下載文件的人的最後一個IP地址是什麼來排序問題。如果IP與再次下載的人(重複下載或頁面刷新)相同,則不會觸發計數器。它的代碼如下:

獲取當前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() 

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

把那下載的文件最後一個IP知道這不是完美的,但它完成了這項工作。任何更好的建議將受到歡迎。