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
相关产品推荐
相关产品推荐

