• Django之auth组件


    auth模块

    概述:

      开发一个网站的时候,是肯定要设计实现网站的用户系统。此时需要我们自己实现登录、认证、注销、修改密码等操作,django它内置了用户认证系统auth。

    1 from django.contrib import auth

    auth中方法:

    authenticate()   

      认证当前用户

    1 user = authenticate(username='sb',password='123456')

    login(HttpRequest, user) 

      该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

      该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。

     1 from django.contrib.auth import authenticate, login
     2    
     3 def my_view(request):
     4   username = request.POST['username']
     5   password = request.POST['password']
     6   user_obj = authenticate(username=username, password=password)
     7   if user_obj:
     8     login(request, user_obj)
     9     # Redirect to a success page.
    10     ...
    11   else:
    12     # Return an 'invalid login' error message.
    13     ...

      注意:只要使用login(request, user_obj)之后,request.user就能拿到当前登录的用户对象。否则request.user得到的是一个匿名用户对象(AnonymousUser Object)。

    logout(request) 

      该函数接受一个HttpRequest对象,无返回值。

      当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

    1 from django.contrib.auth import logout
    2    
    3 def logout_view(request):
    4   logout(request)
    5   # Redirect to a success page. 

    is_authenticated()

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

    1 def my_view(request):
    2   if not request.user.is_authenticated():
    3     return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

     login_requierd()

      auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验

    1 from django.contrib.auth.decorators import login_required
    2       
    3 @login_required
    4 def my_view(request):
    5   ...

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

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

    create_user()

    from django.contrib.auth.models import User
    user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)

    create_superuser()

    from django.contrib.auth.models import User
    user_obj = User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

    check_password(raw_password)

      auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

      密码正确返回True,否则返回False。

    set_password(raw_password)

      auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

      注意:设置完一定要调用用户对象的save方法!!!

    1 user_obj.set_password('123456')
    2 user_obj.save()

    自定义auth_user表

     1 from django.contrib.auth.models import AbstractUser
     2 class UserInfo(AbstractUser):
     3     """
     4     用户信息表
     5     """
     6     nid = models.AutoField(primary_key=True)
     7     phone = models.CharField(max_length=11, null=True, unique=True)
     8     
     9     def __str__(self):
    10         return self.username

    在settings配置

    1 # 引用Django自带的User表,继承使用时需要设置
    2 AUTH_USER_MODEL = "app01.UserInfo" 

      自定义好了我们当然可以使用表了

    普通用户:

    1 UserInfo.objects.create_user(nid=1, password=123456)

    超级用户:

    1 UserInfo.objects.create_superuser(nid=1, password=123456)

    注意:

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

  • 相关阅读:
    LRU(Least Recently Used最近最少使用)的c++实现(顺序表)
    linux下的性能分析profiling(动态)
    实习的具体内容
    x86_64 Ubuntu 14.04 LST安装gcc4.1.2 转载
    Gem5全系统模式下运行SPLASH-2 Benchmarks使用alpha ISA
    gem5 运行x86全系统仿真
    Linux操作系统下三种配置环境变量的方法——转载
    找实习小结
    multi2sim,booksim简介
    破壳(2)之触摸
  • 原文地址:https://www.cnblogs.com/Alexephor/p/11310486.html
Copyright © 2020-2023  润新知