我正在构建用户注册页面。 我希望客户一步一步地输入信息,所以我想分开表格。 例如,输入用户名,密码,然后转到下一页并输入其他信息。 我意识到会话。 这是代码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
?
答案 0 :(得分:3)
如果没有网址,您无法重定向到其他视图。您正在更新每个视图中的request.session
。您可以使用session.get()
方法从会话访问数据。如果您不在视图或表单中编写/调用save方法,则它不应保存任何内容。在链接视图的最终视图中,您可以像这样保存数据:
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:
....