爲了避免垃圾郵件,我想增加一個等待時間來重新提交表格(即用戶應該等待幾秒鐘提交表格,,除了第一次提交此表格提交)。如何構建需要延遲重新提交的Django表單?
爲此,我在表單中添加了一個timestamp
(以及一個包含時間戳記的security_hash
字段加上settings.SECRET_KEY
,這確保了時間戳不被弄亂)。這看起來像:
class MyForm(forms.Form):
timestamp = forms.IntegerField(widget=forms.HiddenInput)
security_hash = forms.CharField(min_length=40, max_length=40, widget=forms.HiddenInput)
# + some other fields..
# + methods to build the hash and to clean the timestamp...
# (it is based on django.contrib.comments.forms.CommentSecurityForm)
def clean_timestamp(self):
"""Make sure the delay is over (5 seconds)."""
ts = self.cleaned_data["timestamp"]
if not time.time() - ts > 5:
raise forms.ValidationError("Timestamp check failed")
return ts
# etc...
這工作正常。但是仍然存在一個問題:時間戳是在用戶首次提交表單時檢查的,我需要避免這種情況。
任何想法解決它?
謝謝! :-)
你爲什麼不在用戶的會話中記錄這個? – 2010-05-06 20:48:25
我認爲會議也是要走的路。 – Dingle 2010-05-06 22:26:33