You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目权限控制需求:仅允许登录用户访问页面

解决Django项目的登录访问限制问题

要实现仅允许登录用户访问指定页面的需求,你可以使用Django内置的@login_required装饰器,这是最简洁且符合Django最佳实践的方案。

步骤1:在views.py中导入并应用登录验证装饰器

首先,在你的views.py顶部添加login_required的导入语句,然后为需要保护的视图函数添加该装饰器。需要保护的视图包括:index、get_book、get_books、get_book_category、get_writer、payment(注意:signin、registration、signout这些登录/注册相关视图不需要添加,保持公开访问)。

修改后的views.py关键部分示例:

from django.contrib.auth.decorators import login_required  # 新增导入
# 其他原有导入...

@login_required  # 添加装饰器
def index(request):
    newpublished = Book.objects.order_by('-created')[:15]
    slide = Slider.objects.order_by('-created')[:3]
    context = {
        "newbooks":newpublished,
        "slide": slide
    }
    return render(request, 'store/index.html', context)

# signin、registration、signout视图保持不变...

@login_required  # 添加装饰器
def payment(request):
    return render(request, 'store/payment.html')

@login_required  # 添加装饰器
def get_book(request, id):
    # 原有函数内容...

@login_required  # 添加装饰器
def get_books(request):
    # 原有函数内容...

@login_required  # 添加装饰器
def get_book_category(request, id):
    # 原有函数内容...

@login_required  # 添加装饰器
def get_writer(request, id):
    # 原有函数内容...

步骤2:配置settings.py中的登录跳转地址

在项目根目录的settings.py文件末尾添加以下配置,指定未登录用户访问受保护页面时,自动跳转到你的登录页面:

LOGIN_URL = 'store:signin'

这里的store:signin对应你urls.py中定义的登录路由名称,确保与你的路由配置一致。

原理说明

  • @login_required装饰器会自动检查请求的用户是否已通过认证:
    • 如果用户已登录,正常执行视图函数;
    • 如果用户未登录,会将用户重定向到LOGIN_URL指定的登录页面,并且登录成功后会自动跳转回用户原本想要访问的页面。
  • 你的signin视图已经包含了if request.user.is_authenticated:的判断,会自动将已登录用户重定向到首页,这部分逻辑无需修改。

验证效果

完成上述修改后,尝试直接访问受保护的页面(比如/books或/book/1),系统会自动跳转到登录页面;登录成功后,会自动回到你原本访问的页面。非登录用户无法再通过直接输入URL访问这些页面。

内容的提问来源于stack exchange,提问作者Lily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:59:54