繁体   English   中英

在Django的models.py中,如果我正在验证表单,如何获取用户的IP?

[英]Inside Django's models.py, if I am validating a form, how do I get the user's IP?

我知道如何在views.py中获取它。

request.META ['REMOTE_ADDR']

但是,当我的表单之一为validateD时,如何在models.py中获取它?

您可以将请求对象传递给正在调用的表单/模型代码:然后将提供对request.META['REMOTE_ADDR'] 或者,只需将其传入。

如果要在表单级别或模型级别进行验证,则两个实例都不知道HTTP请求(存储客户端IP信息的位置)。

我可以想到两种选择:

  • 在视图级别进行验证,您可以在其中将错误插入到表单错误列表中。
  • 您可以将用户IP(可能已加密)放在表单的隐藏字段中。

一种可能的方法,但是我不确定这是否是最好的方法。

定义自己的清洁方法,

class someForm(forms.Form):
    afield = CharField()

    def clean(self, **kwargs):
        cleaned_data = self.cleaned_data
        afield = cleaned_data.get('afield')
        if 'ip' in kwargs:
            ip = kwargs['ip']
            # ip check block, you migth use your cleaned data in here
        return cleaned_data


some_info = {'afield':123} #you will wish to use post or gt form data instead, but tihs iis for example
form = someForm(some_info) 
if form.is_valid():
    data = form.clean({'ip':request.META['REMOTE_ADDR']}) # you pass a dict with kwargs, which wwill be used in custom clean method

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM