详解Django的 login_required() 函数:装饰器,限制未登录用户访问视图

  • Post category:Python

login_required() 函数是 Django 自带的一个装饰器,用来保护一些需要登录后才能访问的视图函数(View)的。它的作用是判断用户是否已经登录,如果已登录,则允许访问该视图函数,否则重定向到登录页面或其他自定义页面。

使用方法:

  1. 在 views.py 中导入 login_required 函数:

    from django.contrib.auth.decorators import login_required

  2. 在需要保护的视图函数上方添加装饰器:

    @login_required
    def my_view(request):
    # 这里是需要保护的逻辑代码

  3. 如果用户未登录,会自动跳转到登录页面,需要在 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 装饰器只会保护当前视图函数,如果需要保护更多的视图函数,需要在这些视图函数上都添加该装饰器。