login_required()
函数是 Django 自带的一个装饰器,用来保护一些需要登录后才能访问的视图函数(View)的。它的作用是判断用户是否已经登录,如果已登录,则允许访问该视图函数,否则重定向到登录页面或其他自定义页面。
使用方法:
-
在 views.py 中导入 login_required 函数:
from django.contrib.auth.decorators import login_required
-
在需要保护的视图函数上方添加装饰器:
@login_required
def my_view(request):
# 这里是需要保护的逻辑代码 -
如果用户未登录,会自动跳转到登录页面,需要在 settings.py 中配置登录 URL:
LOGIN_URL = '/accounts/login/'
实例 1:在博客网站中,只有登录用户才能发表评论
# views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.contrib import messages
@login_required
def post_comment(request, post_id):
if request.method == 'POST':
# 这里是评论提交的逻辑代码
else:
messages.warning(request, '请先登录后再评论!')
return redirect('login')
- 如果用户未登录,会自动跳转到登录页面。
- 如果用户已登录,则可以正常提交评论。
实例 2:在在线商城网站中,用户必须登录后才能查看订单详情页
# views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.contrib import messages
@login_required
def order_detail(request, order_id):
# 这里是查看订单详情的逻辑代码
- 如果用户未登录,会自动跳转到登录页面。
- 如果用户已登录,则可以正常查看订单详情页。
总结:以上两个例子都是通过在需要保护的视图函数上方添加 @login_required
装饰器来实现保护。需要注意的是, @login_required
装饰器只会保护当前视图函数,如果需要保护更多的视图函数,需要在这些视图函数上都添加该装饰器。