В Django models.py, если я проверяю форму, как я могу получить IP пользователя? - PullRequest
0 голосов
/ 18 декабря 2010

Я знаю, как получить его в views.py ....

request.META ['REMOTE_ADDR']

Однако как мне получить его в models.py, когда одиниз моих форм проверяется?

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

Вы можете передать объект запроса вызываемому коду формы / модели: тогда он предоставит доступ к request.META['REMOTE_ADDR']. Или просто введите это.

0 голосов
/ 18 декабря 2010

Один из возможных способов, но я не уверен, что он лучший или нет ...

определите свой собственный чистый метод,

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
0 голосов
/ 18 декабря 2010

Если вы выполняете проверку на уровне формы или на уровне модели, оба экземпляра ничего не знают о HTTP-запросе (где хранится информация об IP-адресе клиента).

Я могу представить два варианта:

  • Подтвердите на уровне просмотра, где вы можете вставить ошибки в список ошибок формы.
  • Вы можете поместить IP-адрес пользователя (может быть зашифрован) в скрытое поле формы.
...