我在django应用中的哪里实现此get_client_ip()函数?

时间:2019-07-19 06:59:21

标签: python django geoip

我有一个采用用户IP地址的“自定义用户”模型。 我要在完成注册表单后添加用户的IP地址我在哪里实现以下代码?我不确定是否将其放入forms.py或views.py文件中。

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0]
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

我希望能够在注册后将用户的IP地址保存到我的自定义用户表中。

2 个答案:

答案 0 :(得分:2)

我希望使用forms,以便可以轻松测试它。您必须在表单初始化期间将请求obj与其他表单kwarg一起传递,或者只能在表单保存期间将请求obj传递(即,传递到form.save方法)。

forms.py

class UserForm(forms.ModelForm):
    ...
    def save(self, commit=True, request=None):
        # User creation logic
        user = super().save(commit=commit)
        if request:
            ip = get_client_ip(request)
            user.ip = ip
            if commit: user.save()
        return user

views.py

form = UserForm(request.POST)
if form.is_valid():
    form.save(request=self.request)

答案 1 :(得分:0)

在您的views.py中 在任何函数之后 定义您的功能(要求): 你已准备好出发! 为了娱乐,还检查它是否有效: 打印(get_client_ip(请求))