我有一个采用用户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地址保存到我的自定义用户表中。
答案 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(请求))