django--login_required

login_required 是一个常用的装饰器,在 Django 和其他一些 Python web 框架中使用,用于保护需要用户身份验证的视图函数,以确保只有已登录的用户才能访问这些视图。

该装饰器的基本工作原理是检查当前用户是否已经登录。如果用户已登录,则继续执行原始视图函数;否则,重定向到登录页面以进行身份验证。在 Django 中,登录页面可以是默认的 /admin/login/,也可以是开发者指定的任何其他视图函数。

下面是一个使用 login_required 装饰器的示例视图函数:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    # 该视图需要用户登录才能访问
    pass

该装饰器还有其他可选参数,例如 login_url 和 redirect_field_name,可以用来自定义登录页面的 URL 和重定向字段的名称。
如果直接访问:
http://127.0.0.1:8000/my_view
会重定向到:
http://127.0.0.1:8000/login/?next=/my_view

源码如下:

def login_required(
    function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None
):
    """
    Decorator for views that checks that the user is logged in, redirecting
    to the log-in page if necessary.
    """
    actual_decorator = user_passes_test(
        lambda u: u.is_authenticated,
        login_url=login_url,
        redirect_field_name=redirect_field_name,
    )
    if function:
        return actual_decorator(function)
    return actual_decorator

lambda u: u.is_authenticated 中的 u.is_authenticated 是一个 User 模型的布尔属性,表示用户是否已经通过身份验证。在 Django 中,当用户成功登录后,系统会为该用户创建一个 User 实例,该实例中包含了用户的身份信息,包括用户名、密码等等。如果该用户已经通过身份验证,即已经登录,则其 is_authenticated 属性会被设置为 True。反之,如果该用户尚未通过身份验证,则其 is_authenticated 属性为 False。
因此,这个匿名函数的作用是检查传递给它的用户对象的 is_authenticated 属性是否为 True,如果是,则说明该用户已经通过身份验证,否则说明该用户尚未通过身份验证。如果用户已经通过身份验证,则可以访问需要登录的视图,否则将重定向到登录页面。

你可能感兴趣的:(django,django,python,后端)