• 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表了。

  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/zze46/p/9815677.html
Copyright © 2020-2023  润新知