【问题标题】:Redirect from Generic View to Generic View从通用视图重定向到通用视图
【发布时间】:2016-08-22 16:45:45
【问题描述】:

我正在建立一个用户注册页面。 我希望客户一步一步输入信息,所以我想将表格分开。 例如,输入用户名、密码,然后进入下一页并输入其他信息。 我通过会话意识到这一点。 这是代码片段

class RegisterBaseView(CreateView):
    def form_valid(self, form):
        for name in form.register_fields:
            self.request.session.update(
                {
                    name: form.cleaned_data[name]
                 }
            )

        return HttpResponseRedirect(self.success_url)



class RegisterProfileView(RegisterBaseView):
    form_class = RegisterProfileForm
    success_url = reverse_lazy('')
    template_name = 'player/register_profile.html'

class RegisterUserView(RegisterBaseView):
    form_class = RegisterUserForm
    success_url = reverse_lazy('')
    template_name = 'player/register_user.html'

我希望RegisterUserView 直接重定向到RegisterProfileView 而不使用urls.py,因为我保存了最终相互链接的对象。

success_url应该怎么写?

【问题讨论】:

    标签: django redirect view django-generic-views


    【解决方案1】:

    如果没有 url,您将无法重定向到另一个视图。您正在更新每个视图中的 request.session。您可以使用session.get() 方法从会话中访问数据。如果您不在视图或表单中编写/调用保存方法,那么它不应该保存任何内容。在链式视图的最终视图中,您可以像这样保存数据:

    class FinalView(CreateView):
    
        def form_valid(self, form):
           name = self.request.session.get('name', None)
           ....
           if form.is_valid():
               data = form.cleaned_data['data']
               your_model = YourModel()
               your_model.name = name
               your_model.data = data
               your_model.save()
    

    要防止用户访问任何中间视图,请执行以下操作:

    class MiddleView(SomeView):
    
        def form_valid(self):
            if self.request.session.get('name', None) is None:
                return HttpResponseRedirect('/first_view_url')
            else:
              ....
    

    【讨论】:

    • 谢谢,那我应该如何防止直接输入url访问链式中间视图呢?
    • 可以直接放,也可以使用success_url放。另一件事,您需要将单独的 url 与每个视图关联。
    • 如果用户直接访问中间视图,是不是不可能,该视图会阻塞用户并重定向到第一个链式视图?
    • 谢谢你,我会竖起大拇指的!
    猜你喜欢
    • 2021-09-25
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2017-10-30
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多