确认通过POST数据向用户反馈通用FormView POST成功

3 投票
3 回答
4639 浏览
提问于 2025-04-17 12:58

我想用一个通用的表单视图来把用户提交的POST数据的一些信息反馈给用户,但我不太确定该怎么做。

class MyView(generic.FormView):
    form_class = MyForm
    def get_success_url(self):
        return reverse('success')

reverse('success')会重定向到一个简单的页面

class SuccessView(generic.TemplateView):
    template_name = 'success.html'

有没有办法让我在SuccessView中通过get_success_url调用访问params对象,或者有没有更好(更简单)的方法来做到这一点?谢谢,Dan

更新(这是我的解决方案,但感谢大家的想法)

我发现这是我解决问题的最简单方法:

class SuccessMixin(object):
    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form, **kwargs)

    def form_valid(self, form):
        # this is my post processing step which returns the
        # feedback data that I want to pass to the user
        form_data = form.get_some_data_from_form()
        return render_to_response('submitted.html', 
            {'form_data': form_data,}, 
            context_instance=RequestContext(self.request))

每个视图都继承了这个混合类,如果表单有效,我就从中提取反馈数据并将其作为响应呈现——完全绕过了get_success_url的重定向。我已经去掉了get_success_urlSuccessView

3 个回答

1

你想要实现的功能可以通过使用会话(Sessions)来完成。你可以把需要的值存储在用户的会话对象里,然后在成功页面(SuccessView)中访问这些值。想了解更多细节,可以查看Django的会话文档

2

我也在尝试弄明白这个问题,一个简单的解决办法是使用:

from django.contrib import messages

在 get_success_url(self) 这个方法里,你可以写

def get_success_url(self)
    messages.add_message(self.request, messages.SUCCESS, 'Contact Successfully Updated!')
    return reverse('contacts:contact_detail', args=(self.get_object().id,))

然后在你的模板中,你可以通过以下方式访问这个消息:

{% for message in messages %}
    {{ message }}
{% endfor %}
5

在你的成功网址中,把数据作为 GET 参数包含进去。

def get_success_url(self):
   url = reverse('success')
   # maybe use urlencode for more complicated parameters
   return "%s?foo=%s" % (url, self.request.POST['bar'])

然后在你的模板里,获取这些 GET 数据中的参数。

foo: {{ request.GET.foo }}

撰写回答