根据POST请求将用户的IP地址存储在Django的数据库中

时间:2019-05-27 15:04:15

标签: python django python-2.7 django-forms

在用户通过提交我的表单发送POST请求时尝试存储其IP地址,尝试了一些有关获取IP地址的建议,但由于我总是得到{在数据库表中为IP存储了{1}}个值。

我尝试使用模型表单并将ip地址设置为表单内的变量,以便可以更方便地使用nullrequest.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()

,然后在模板中编辑输入字段。

1 个答案:

答案 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字段,而不是在模板中使用隐藏的输入。