详解Django的 login() 函数:用户登录

  • Post category:Python

首先我们需要了解Django的认证系统。Django的认证系统是很方便的,我们只需要在settings.py中设置好认证系统所需的基础配置,就可以使用Django提供的认证系统来进行用户注册、登录、登出、修改密码等操作。其中,login()函数用于登录已有账户,并将用户才能信息存储在用户浏览器的cookie或在服务端session中,方便后续的操作。

login()函数的作用

Django的login()函数可以将用户认证信息添加到request对象中,方便后续的操作。login()函数包含以下两个参数:

  1. request:必须参数,表示浏览器或用户发来的请求,包含用户提交过来的数据;
  2. user:必须参数,表示再数据库中查询到的已有用户,可以通过authenticate()方法进行验证。

login()函数返回一个表示是否认证成功的布尔值。

使用方法

下面是login()函数的使用方法:

    from django.contrib.auth import authenticate, login
    # authenticate()用于验证用户
    # login()用于登录已有用户

    def my_view(request):
        username = request.POST['username'] # POST请求用户名
        password = request.POST['password'] # POST请求密码
        user = authenticate(request, username=username, password=password) # 验证用户信息
        if user is not None:
            # 用户已通过验证且为活跃状态
            if user.is_active:
                login(request, user) # 登录用户
                # 重定向到用户个人页面
                return HttpResponseRedirect('/my_profile/')
            else:
                # 重定向到一个“帐户已禁用”错误页面
                return render(request, 'disable_account.html')
        else:
            # 用户名/密码验证失败
            return render(request, 'invalid_login.html')

在这个例子中,login()函数会为验证过的用户创建一个会话,以便在接下来的请求中使用。Django会自动管理会话,翻译用户的状态和其他相关信息。用户认证成功时,你可以使用request.user属性来访问已经登录的用户对象。

实例1: 用户登录

下面是一个完整的用户登录示例,以帮助你了解login()函数的使用方法。假设我们有一个名为login_view的Django视图,用于渲染登录页面。用户通过输入用户名和密码来登录,登录成功后会重定向到主页。

    from django.shortcuts import render, redirect
    from django.contrib.auth import authenticate, login

    def login_view(request):
        if request.method == 'POST':
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('home') # 重定向到主页
            else:
                # 用户名/密码验证失败
                return render(request, 'login.html', {'error': 'Invalid Username or Password.'})
        else:
            return render(request, 'login.html')

实例2: 使用login()函数来存储用户登录状态

在接下来的示例中,我们将展示如何使用login()函数来存储用户登录状态。假设我们有一个名为profile_view的Django视图,用于渲染用户个人资料页面。只有登录成功后的用户才能访问这个页面。

    from django.shortcuts import render
    from django.contrib.auth.decorators import login_required

    @login_required
    def profile_view(request):
        user = request.user
        return render(request, 'profile.html', {'user': user})

在这个示例中,我们使用Django提供的login_required装饰器装饰了profile_view视图。这样,只有已经登录的用户才能访问这个视图。如果访问这个视图时用户未被认证,则会重定向到登录页。如果用户已经被认证,我们就可以通过request.user属性来访问已经登录的用户对象,并向模板传递用户对象。这样,模板就能够获取到登录用户的信息,进行展示或者其他处理操作。