簡體   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