【发布时间】:2021-07-11 13:33:38
【问题描述】:
我用 Django 开发了一个项目。但我希望每个用户 IP 能够发布请求 2 分钟以防止垃圾邮件。我怎样才能做到这一点?你有什么建议吗?
【问题讨论】:
-
也许这个question有助于在Django中获取IP地址,看看吧。
标签: python django post python-requests
我用 Django 开发了一个项目。但我希望每个用户 IP 能够发布请求 2 分钟以防止垃圾邮件。我怎样才能做到这一点?你有什么建议吗?
【问题讨论】:
标签: python django post python-requests
连同 Gealber 在他的评论中的链接,您可能可以创建一个模型来保存发布请求的历史记录以及 IP。在models.py中是这样的-
class PostRequestLog(models.Model):
ip = models.CharField(max_length=30)
latestRequest = models.TimeField(auto_now=False, auto_now_add=False)
def get_latest_request(self):
return self.latestRequest
def set_latest_request(self, latestRequest):
self.latestRequest = latestRequest
在views.py中,有类似-
from models import PostRequestLog
from django.shortcuts import redirect, render
import datetime
def home_page(request):
ip = get_client_ip(request)
object = PostRequestLog.objects.get(ip__iexact=ip)
time = datetime.now()
if object:
latestRequest = object.get_latest_request()
if time - latestRequest < threshold:
return redirect('home') # or whatever you want to do to direct away
else:
object.set_latest_request(time)
else:
newObject = PostRequestLog.objects.create(ip=ip, latestRequest=time)
newObject.save()
# process POST
上面的代码中可能有相当多的缺失或错误,但通常这个想法应该可行。如果您试图根本不允许用户访问网页(表单所在的位置),那么您可以将上述函数放入执行相同检查的包装器中。使用它来包装 views.py 中的任何函数,这些函数会使用表单呈现您的页面。如果未达到阈值,则不会重定向到带有表单的页面。
【讨论】: