[英]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信息的位置)。
我可以想到兩種選擇:
一種可能的方法,但是我不確定這是否是最好的方法。
定義自己的清潔方法,
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.