【问题标题】:Python Django Post Requests Spam PreventionPython Django Post 请求垃圾邮件预防
【发布时间】:2021-07-11 13:33:38
【问题描述】:

我用 Django 开发了一个项目。但我希望每个用户 IP 能够发布请求 2 分钟以防止垃圾邮件。我怎样才能做到这一点?你有什么建议吗?

【问题讨论】:

  • 也许这个question有助于在Django中获取IP地址,看看吧。

标签: python django post python-requests


【解决方案1】:

连同 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 中的任何函数,这些函数会使用表单呈现您的页面。如果未达到阈值,则不会重定向到带有表单的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2011-03-03
    • 2014-04-20
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多