Django注册后跳转至创建页面失效问题求助(附代码)
问题修复方案
核心问题分析
- 注册视图的
post方法中,表单验证通过后仅定义了success_url变量,但未执行重定向操作,而是始终返回注册页面的渲染结果,这是跳转失效的直接原因。 - 新增登出功能后,注册流程缺少自动登录用户的逻辑,用户注册后未处于登录状态,而
ProfileCreate视图带有LoginRequiredMixin,即使触发跳转也会被拦截(当前连跳转都未触发)。
代码修改步骤
1. 修复注册视图(Views.py)
在表单验证通过后,自动登录用户并执行重定向:
# 先导入必要模块 from django.contrib.auth import login from django.shortcuts import redirect, reverse #For Customer Registration class CustomerRegistrationView(View): def get(self,request): form = CustomerRegistrationForm() return render(request,'mp/register.html',{'form':form}) def post(self,request): form = CustomerRegistrationForm(request.POST) if form.is_valid(): messages.success(request,'Congratulations Registered Successfully ') user = form.save() # 捕获创建的用户对象 # 自动登录用户 login(request, user) # 重定向到profilecreate页面 return redirect(reverse('profilecreate')) # 表单验证失败时,返回注册页面并显示错误 return render(request,'mp/register.html',{'form':form})
2. 清理ProfileCreate视图冗余代码(可选)
ProfileCreate的form_valid方法中定义的success_url未生效,父类的form_valid会使用类级别的success_url。如需修改跳转目标,直接修改类属性即可:
class ProfileCreate(LoginRequiredMixin,CreateView): model = Profile fields = ['user_name','user_ethnicity','SelectGender','user_job','user_age','mother_additionalinfo'] success_url = reverse_lazy('profile') # 此处改为实际需要的跳转目标 def form_valid(self,form): form.instance.user = self.request.user return super(ProfileCreate,self).form_valid(form)
关键说明
login(request, user):注册完成后立即登录用户,确保用户有权限访问带LoginRequiredMixin的ProfileCreate视图。redirect(reverse('profilecreate')):替换原有的render操作,触发页面跳转,而非停留在注册页。- 未自动登录用户时,即使跳转至
profilecreate,也会被LoginRequiredMixin拦截到登录页面,这也是新增登出功能后问题显现的核心原因。
内容的提问来源于stack exchange,提问作者Shahan Ghani
相关产品推荐
相关产品推荐

