Django函数视图下用户注册成功后如何跳转至指定页面并自动登录?
实现注册成功自动登录并跳转至products/index的修改方案
第一步:导入所需认证函数
在views.py顶部添加导入语句:
from django.contrib.auth import authenticate, login
第二步:调整register视图的验证通过逻辑
你需要在form.save()执行后补充用户身份校验、自动登录的代码,同时把原跳转逻辑指向目标路径:
- 从表单清洗数据中获取用户名、密码参数完成身份校验
- 调用login方法完成自动登录
- 调整redirect参数跳转至目标地址,优先推荐使用URL命名跳转,后续维护更方便
第三步:完整修改后的代码示例
# 顶部先导入所需函数 from django.contrib.auth import authenticate, login def register(request): if request.method == 'GET': form = RegisterForm() context = {'form': form} return render(request, 'register.html', context) if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): form.save() # 从表单获取用户名和密码完成认证 username = form.cleaned_data.get('username') # 如果你的RegisterForm不是继承Django原生UserCreationForm,密码字段名请替换为你自己表单对应的字段 password = form.cleaned_data.get('password1') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) messages.success(request, 'Account was created for ' + username) # 两种跳转方式二选一即可 # 方式1:硬编码路径跳转 # return redirect('/products/index/') # 方式2:命名URL跳转(推荐,需要先在urls.py配置对应名称) return redirect('products_index') else: print('Form is not valid') messages.error(request, 'Error Processing Your Request') context = {'form': form} return render(request, 'register.html', context) return render(request, 'register.html', {}) @login_required def index(request): products = product.objects.all() return render (request,'index.html',{'products':products})
配套路由配置说明
如果选择用命名URL跳转,需要在你的urls.py(可以是项目根urls.py或者products应用的urls.py)中添加对应配置,示例如下:
from django.urls import path from . import views urlpatterns = [ # 其他路由 path('products/index/', views.index, name='products_index'), ]
注意:如果是在应用urls.py中配置,需要确保根urls.py已经包含了products应用的路由前缀。
内容的提问来源于stack exchange,提问作者SUJITH JOHN PHILIP
相关产品推荐
相关产品推荐

