在LoginRequiredMixin中如何接收redirect_field_name

时间:2016-07-06 18:29:38

标签: python django

从文档中得到了这个:

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

但是在我的loginView(FormView)我无法找到接收和使用" redirect_to"的方法。在form_valid()方法中使用var将用户发送回原始部分。

实际上我可以使用get()方法接收它,但我认为我需要form_valid()

拜托,我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:0)

您可以从redirect_to检索request.GET,因此在您的CBV方法中,您可以使用self.request.GET.get('redirect_to')

请注意重定向到从查询字符串获取的网址可能不安全。例如,它可以链接到不同的域。 Django有一个方法is_safe_url,用于在登录或注销时检查下一个URL。

答案 1 :(得分:0)

我删除了get方法并添加了get_context_data代替:

def get_context_data(self, **kwargs):
        context = super(Login_vw, self).get_context_data(**kwargs)
        context['next'] = self.request.GET.get('redirect_to')
        return context

然后在我的tamplate表单中添加了这个:

<input type="hidden" name="next" value="{{ next }}" />

然后在form_valid方法中检索“next”变量,如下所示:

next = self.request.POST.get('next')

就是这样,在一个简短的解释中,get_context_data收到下一个网址,将其发送到模板表单,然后模板表单将其发送回form_valid方法