使用@login_required时出现404错误:找不到/accounts/login/页面
问题原因
@login_required 装饰器默认会将未登录用户重定向到 /accounts/login/,但你的项目中登录路径配置的是 /login/,系统找不到默认路径,因此返回404错误。
解决方法
方法一:给装饰器指定登录URL
直接在 @login_required 中显式设置登录路径,覆盖默认值:
修改 views.py 中的视图函数:
@login_required(login_url='/login/') def transactions(request): user_transactions = Transactions.objects.filter(transaction_medium = request.user) return render(request,'transactions.html',{'user_transactions':user_transactions})
方法二:全局配置登录URL(推荐)
如果多个视图都需要登录验证,在项目的 settings.py 中添加全局配置,一次性修改所有 @login_required 的跳转目标:
在 settings.py 文件末尾添加:
LOGIN_URL = '/login/'
补充:登录后跳转回原页面
确保登录视图处理完登录逻辑后,能通过 next 参数跳转回用户原本要访问的页面。示例代码如下:
from django.contrib.auth import authenticate, login from django.shortcuts import redirect, render def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) # 获取跳转目标,默认跳转到首页 next_page = request.GET.get('next', '/') return redirect(next_page) # 登录失败的处理,返回错误提示 return render(request, 'login.html', {'error': '用户名或密码错误'}) return render(request, 'login.html')
内容的提问来源于stack exchange,提问作者Bruce_Wayne
相关产品推荐
相关产品推荐

