Django中的禁止IP表单验证

时间:2009-02-18 10:05:02

标签: django django-forms

我正在尝试验证表单,以便如果用户的IP(request.META['REMOTE_ADDR'])位于表BlockedIPs中,则验证失败。但是,我无法访问request中的Form变量。我该怎么做?感谢。

1 个答案:

答案 0 :(得分:9)

通过覆盖__init__使其可用于表单,以便在构建期间传递(或者您可以直接传递IP):

from django import forms

class YourForm(forms.Form)
    # fields...

    def __init__(self, request, *args, **kwargs):
        self.request = request
        super(YourForm, self).__init__(*args, **kwargs)

    # validation methods...

现在,您只需要在初始化表单时将request对象作为第一个参数传递,并且您的自定义验证方法可以通过self.request访问它:

if request.method == 'POST':
    form = YourForm(request, request.POST)
    # ...
else:
    form = YourForm(request)
# ...