Python Django Post 请求垃圾邮件预防
Python Django Post Requests Spam Prevention
我用Django开发了一个项目。但是我希望每个用户IP能够post请求2分钟以防止垃圾邮件。我怎样才能做到这一点?你有什么建议吗?
连同 Gealber 的 link 在他的评论中,您可以创建一个模型来保存 post 请求的历史记录以及 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 中的任何功能,这些功能会使用表单呈现您的页面。如果未达到阈值,则不会重定向到带有表单的页面。
我用Django开发了一个项目。但是我希望每个用户IP能够post请求2分钟以防止垃圾邮件。我怎样才能做到这一点?你有什么建议吗?
连同 Gealber 的 link 在他的评论中,您可以创建一个模型来保存 post 请求的历史记录以及 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 中的任何功能,这些功能会使用表单呈现您的页面。如果未达到阈值,则不会重定向到带有表单的页面。