Django退出登录后仍显示个人资料页,如何实现未登录重定向至登录页?
实现未登录用户访问个人资料页自动重定向至登录页
你已经在视图函数profile_page和edit_bio上使用了@login_required装饰器,但还需要完成以下配置才能让重定向逻辑正常生效:
1. 在settings.py中配置登录跳转地址
Django的login_required装饰器需要明确登录页面的路由标识,在项目的settings.py文件末尾添加以下配置:
LOGIN_URL = 'login' # 对应urls.py中登录路由的name值
2. 优化登录成功后的跳转逻辑
当前login_user视图中登录成功后使用了硬编码的跳转地址,建议改为使用URL名称,适配不同部署环境:
修改views.py中的login_user函数:
def login_user(req): if req.method == 'POST': form = AuthenticationForm(data=req.POST) if form.is_valid(): user = form.get_user() login(req, user) # 使用路由name跳转首页,替代硬编码地址 return redirect('home') else: form = AuthenticationForm() return render(req, 'loginpage.html', {'form': form})
3. (可选)完善logout视图的兼容性
当前logout_user视图仅处理POST请求,可修改为支持GET请求,提升操作灵活性:
def logout_user(req): logout(req) return redirect('home')
逻辑说明
@login_required装饰器会自动检查请求中的用户状态:- 若用户未登录,会直接重定向到
LOGIN_URL指定的登录页面,同时在URL后附加?next=/profile/参数,登录成功后会自动跳转回之前访问的个人资料页 - 若用户已登录,则正常执行视图函数的业务逻辑
- 若用户未登录,会直接重定向到
完成以上配置后,未登录用户访问/profile/或/profile/edit/时,会被自动引导至登录页面,登录成功后将返回目标页面。
内容的提问来源于stack exchange,提问作者user21135338
相关产品推荐
相关产品推荐

