Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用表单提交Django记录IP地址_Python_Django_Python 3.x_Django Forms - Fatal编程技术网

Python 使用表单提交Django记录IP地址

Python 使用表单提交Django记录IP地址,python,django,python-3.x,django-forms,Python,Django,Python 3.x,Django Forms,我正在尝试使用django ipwarepacakge记录通过django提交表单的人的IP地址 表单是一个模型表单。模型如下: #models.py 从django.db导入模型 类上载(models.Model): email=models.EmailField() title=models.CharField(最大长度=100) language=models.ForeignKey('about.channel',on_delete=models.CASCADE,default='Othe

我正在尝试使用
django ipware
pacakge记录通过django提交表单的人的IP地址

表单是一个模型表单。模型如下:

#models.py
从django.db导入模型
类上载(models.Model):
email=models.EmailField()
title=models.CharField(最大长度=100)
language=models.ForeignKey('about.channel',on_delete=models.CASCADE,default='Other'))
date=models.DateField(auto\u now\u add=True)
file=models.FileField()
ip_地址=models.GenericIPAddressField()
表格如下:

#forms.py
类上载表单(forms.ModelForm):
类元:
模型=上传
字段=[“电子邮件”、“标题”、“语言”、“文件”]
标签={
“电子邮件”:“电子邮件”,
“标题”:“视频标题”,
“文件”:“附加文件”
}
获取IP地址的业务逻辑非常简单,但我尝试将其放置在不同的位置,但没有成功。我应该将逻辑放在哪里,以便它与其他表单数据一起提交

#views.py
从ipware.ip导入获取\u真实\u ip
ip=获取真实ip(请求)

我在基于函数的视图中这样做。我有一个名为
submit\u happiness
的视图函数,它提交一个名为
Survey\u form
的表单。在提交表单之前,my
submit\u happiness
视图获取IP并将该字段添加到表单中。表格提交至我的
评级
模型。我的
评级
模型有一个名为
ip
的字段


根据以上@David Smoliksi的建议,我是如何解决这个问题的:

#view.py
def上传(请求):
ip=str(获取真实ip(请求))#在此处检索用户ip
如果request.method==“POST”:
表单=上传表单(request.POST、request.FILES)
如果form.is_有效():
新建_upload=form.save(commit=False)#保存用户在网站上输入的表单数据,而不将其提交到数据库
new_upload.ip_address=ip#将上述请求的ip_地址添加到所有其他表单条目,因为它们映射到模型
新建_upload.save()#保存完成的表单
返回重定向('上载')
其他:
form=UploadForm()
上下文={
“形式”:形式
}
返回呈现(请求'content/upload.html',上下文)
def submit_happiness(request):
    form = Survey_Form(request.POST or None)
    ip = str(get_client_ip(request)) # I got the IP here!!!!!!!!!!
    saved_ip_query = Rating.objects.filter(ip=ip)
    message = False
    if saved_ip_query:
        message = ('I already have a survey from IP address '
                   f'{ip}. You might have submitted a survey.')
    if form.is_valid():
        new_rating = form.save(commit=False)
        new_rating.ip = ip
        form.save()
        form = Survey_Form()  # clears the user's form input
    context = {
        'form': form, 'message': message
    }
    return render(request, "ratings/submit_happiness.html", context)