python - 如何访问FormView中的request对象

标签 python django

我想访问 FormView 中的请求对象并获取客户端 IP。众所周知,在 html 表单中放置一个隐藏字段不是很可靠,因为如果用户愿意,它可以由用户更改。因此,我选择在后面做。我使用 ModelForm 作为 FormView 的 form_class 并排除表单中的 ip 字段。问题来了,我知道如何动态添加 ip 字段。我总是无法成功保存模型。 这是我的代码。

模型.py

class MyModel(models):
    ip = models.GenericIPAddressField()
    [...]

表单.py

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        exclude = ['ip']

views.py

class MyView(FormView):
    form_class = MyForm
    [...]

我尝试更改 psot() 方法并手动添加 request.POSTip 字段,但我刚刚发现我不知道如何传递表单实例..我花了一个晚上来解决这个问题,最后我失败了.. 提前提供帮助的坦克..

感谢 Daniel 回答这个问题。

我把我的代码改成了这样:

views.py

class PollView(FormView):
    template_name = 'poll.html'
    form_class = PollForm
    success_url = '/thanks/'

    def get_ip(self,request):
        if request.META.has_key('HTTP_X_FORWARDED_FOR'):  
            ip =  request.META['HTTP_X_FORWARDED_FOR']  
        else:  
            ip = request.META['REMOTE_ADDR']
        return ip

    def form_valid(self, form):
        form.instance.ip = self.get_ip(self.request)
        super(PollView,self).form_valid(form)

但是我得到一个错误:

ValueError at /
The view poll.views.PollView didn't return an HttpResponse object. It returned None instead.

最佳答案

您找到了问题的答案。丹尼尔罗斯曼值得一些 +1

您可以使用 FormView 类的实例访问请求对象。使用

self.request.META['REMOTE_ADDR']

关于python - 如何访问FormView中的request对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43282819/

相关文章:

python - RSA 解密返回额外数据

javascript - 如何将数组变量从 Python 插入到 Javascript

python - statsmodels_df_model属性错误

python - plotly dash 不刷新

sql - 查询的 Django 回溯

python - Django ORM 可以有 strip 字段吗?

Python:在列表列表中找到最左边的非零值

django - 如何在通过 api 获得访问 token 时创建新用户和新的 django allauth 社交帐户?

javascript - 如何在django中添加JS

python - 在 Django 中更新条件