python框架之Django(12)-认证系统之auth模块

  我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

  Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了auth模块的来实现强大的用户认证系统,默认使用 auth_user表来存储用户数据。

auth模块

from django.contrib import auth

方法

  • create_user

    创建新用户。

    from django.contrib.auth.models import User
    user = User.objects.create_user(username = 'admin', password = '123')
  • create_superuser

    创建超级用户。

    from django.contrib.auth.models import User
    User.objects.create_superuser(username='admin88', password='123', email='zze46@foxmail.com')
  • authenticate

    用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。

    如果认证成功(用户名和密码正确有效),便会返回一个 User 对象, 并且会在该User对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的。

    user = auth.authenticate(username='admin88',password='123')
  • login

    用户登录,它本质上会在后端为该用户生成相关session数据。该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

    from django.contrib.auth import authenticate, login
       
    def view_login(request):
      username = request.POST['username']
      password = request.POST['password']
      user = authenticate(username=username, password=password)
      if user is not None:
        login(request, user)
  • logout

    该函数接受一个HttpRequest对象,无返回值。 当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

    from django.contrib.auth import logout
       
    def view_logout(request):
        logout(request)
  • is_authenticated

    判断当前请求是否通过了认证。

    def my_view(request):
        if not request.user.is_authenticated():
            ...
  • login_requierd

    auth模块提供的一个装饰器,用来的给某个视图添加登录校验。

    from django.contrib.auth.decorators import login_required
          
    @login_required
    def my_view(request):
        ...

    若用户没有登录,则会跳转到django默认的登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

    如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。

    LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由
  • check_password

    检查密码是否正确,需要提供当前请求用户的密码。密码正确返回True,否则返回False。

    is_ok = user.check_password('123')
  • set_password

    修改密码,接收要设置的新密码作为参数。注意:设置完一定要调用用户对象的save方法才会生效!

    user.set_password(password='123')
    user.save()

补充

User内置属性

username:
用户名。
is_staff:
是否是超级用户。
is_active :
是否是激活状态(非激活状态不能登录)。

扩展默认的auth_user表

  • 创建自定义User模型

    from django.contrib.auth.models import AbstractUser
    class UserInfo(AbstractUser):
        """
        用户信息表
        """
        nid = models.AutoField(primary_key=True)
        phone = models.CharField(max_length=11, null=True, unique=True)
        
        def __str__(self):
            return self.username
  • 配置默认User表

    AUTH_USER_MODEL = "app名.User表名"

    注意:一旦我们在认证系统指定了新的用户表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

原文地址:https://www.cnblogs.com/zze46/p/9815677.html