在用户通过提交我的表单发送POST
请求时尝试存储其IP地址,尝试了一些有关获取IP地址的建议,但由于我总是得到{在数据库表中为IP存储了{1}}个值。
我尝试使用模型表单并将ip地址设置为表单内的变量,以便可以更方便地使用null
和request.META.get
将其存储到数据库中,以从请求中获取实际地址在views.py中。
我的应用程序构建如下:
models.py:
x_forwarded_for
forms.py:
class RequestPull(models.Model):
a = models.CharField(max_length=10)
b = models.CharField(max_length=10)
ip_address = models.GenericIPAddressField(null=True)
views.py(给出相同结果的尝试之一-数据库中的null值):
class GetReq(forms.ModelForm):
class Meta:
model = RequestPull
fields = ['a','b','ip_address']
预期结果是要存储在数据库中的用户的IP地址,作为表格的值之一。
如前所述,实际结果是表格中每个字段的有效值,但IP地址始终存储为def get_client_ip(request):
remote_address = request.META.get('HTTP_X_FORWARDED_FOR') or request.META.get('REMOTE_ADDR')
ip = remote_address
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
proxies = x_forwarded_for.split(',')
while (len(proxies) > 0 and proxies[0].startswith(PRIVATE_IPS_PREFIX)):
proxies.pop(0)
if len(proxies) > 0:
ip = proxies[0]
print"IP Address",ip
return ip
def reqPull(request):
if request.method == 'GET':
form = GetReq()
else:
form = GetReq(request.POST)
if form.is_valid():
form.ip_address = get_client_ip(request)
form.save()
。
编辑。 通过更改views.py,设法使其正常工作。
null
到。
if form.is_valid():
form.ip_address = get_client_ip(request)
form.save()
,然后在模板中编辑输入字段。
答案 0 :(得分:0)
设法通过更改views.py使其正常工作。
if form.is_valid():
form.ip_address = get_client_ip(request)
form.save()
到。
if form.is_valid():
obj = form.save(commit=False)
obj.ip_address = get_client_ip(request)
obj.save()
,然后在模板中编辑输入字段。
对于其他可能会读到此内容的人,您还应该注意Kevin的评论,并从表单中完全排除ip_address字段,而不是在模板中使用隐藏的输入。