从通用视图重定向到通用视图
Redirect from Generic View to Generic View
我正在构建一个用户注册页面。
我想让客户一步步输入信息,所以我想把表格分开。
例如输入用户名、密码,然后进入下一页输入其他信息。
我通过会话意识到这一点。
这是代码 snipet
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
?
如果没有 url,您将无法重定向到另一个视图。您正在更新每个视图中的 request.session
。您可以使用 session.get()
方法从会话访问数据。如果您没有 write/call 视图或表单中的保存方法,那么它不应该保存任何内容。在链接视图的最终视图中,您可以像这样保存数据:
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:
....
我正在构建一个用户注册页面。 我想让客户一步步输入信息,所以我想把表格分开。 例如输入用户名、密码,然后进入下一页输入其他信息。 我通过会话意识到这一点。 这是代码 snipet
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
?
如果没有 url,您将无法重定向到另一个视图。您正在更新每个视图中的 request.session
。您可以使用 session.get()
方法从会话访问数据。如果您没有 write/call 视图或表单中的保存方法,那么它不应该保存任何内容。在链接视图的最终视图中,您可以像这样保存数据:
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:
....