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
的表单。在提交表单之前,mysubmit\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)