zoukankan      html  css  js  c++  java
  • Auth认证模块

    一:什么是Auth模块

      就是django默认的用户认证系统:现包括用户注册、用户登录、用户认证、注销、修改密码等功能

    二:如何使用auth模块

      首先导入模块:

    # 导入auth模块
    from django.contrib import auth
    # 导入django的auth_user表
    from django.contrib.auth.models import User

      使用auth模块实现用户的注册:

    def auth_register(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            # auth.authenticate:重auth_user中拿去数据生成一个user对象
            user_obj = auth.authenticate(request,username=username)
            # 如果对象已经存在就终止注册
            if user_obj:
                return HttpResponse('当前用户已存在')
            # 此过程是创建普通用户
            # User.objects.create_user(username=username,password=password)
            # 此过程是创建超级用户
            User.objects.create_superuser(username=username,password=password,email='123@163.com')
        return render(request,'auth_register.html')

      ps:超级用户和普通用户的区别:

          1:超级用户可以登陆django自带的后台管理系统,而普通用户不可以

          2:超级用户在创建时必须指定email,而普通用户可以不指定。

          3:超级用户在用户表中的is_superuser的字段是储存的是1,而普通用存储的是0。

      使用auth模块实现用户的登陆:

    # 导入auth模块
    from django.contrib import auth
    # 导入django的auth_user表
    from django.contrib.auth.models import User
    def auth_login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            # models.User.objects.filter(username=username,password=password).first()
            user_obj = auth.authenticate(request,username=username,password=password)
            if user_obj:
                # 记录用户状态
                request.session['name'] = username
                auth.login(request,user_obj)  # 一旦记录了,可以在任意的地方通过request.user获取到当前登录对象
                return HttpResponse('ok')
        return render(request,'auth_login.html')

      ps:登陆的特点在于:

        1:只要成功实行了auth.login(request,user_obj)之后,就会从其他任意视图函数中通过request.user_obj获取登陆用户对象。

        2:当没有执行auth.login,request.user打印出来的是匿名用户。

        3:request.user.is_auth可以判断request.user是否通过auth_login登陆。

      注销:

    def auth_logout(request):
        auth.logout(request)  # request.session.flush()
        return HttpResponse('ok')

      修改密码:

    def auth_password(request):
        print(request.user.password)
        is_res = request.user.check_password('jason123')  # 校验密码是否一致
        if is_res:
            request.user.set_password('666')  # 设置新密码
            request.user.save()  # 修改密码必须save保存  不然无效
        return HttpResponse('ok')

      使用装饰器校验登陆以及是否跳转:

    from django.contrib.auth.decorators import login_required
    @login_required(login_url='/auth_login/') # 局部配置,校验失败则跳转到指定页面
    def auth_home(request):
        return HttpResponse('home必须登录才能访问')
    
    
    @login_required(login_url='/auth_login/')
    def auth_xxx(request):
        return HttpResponse('xxx必须登录才能访问')

      在setting中配置自动跳转:

    LOGIN_URL = '/auth_login/'

    三:如何扩张auth_user表:

      采用面向对象继承的方法:

    from django.contrib.auth.models import User,AbstractUser
    class UserInfo(AbstractUser):
      phone = models.CharField(max_length=32)

      需要在配置文件中,指定我们不再使用的auth_user表而是使用我自己创建的userinfo表:

      settings.py

    # 告诉django不再使用默认的auth_user,而使用我们自己定义的表
    # AUTH_USER_MODEL = "app名.models里面对应的模型表名"
    AUTH_USER_MODEL = 'app01.Userinfo'

      

  • 相关阅读:
    Set the Welcome Page in SharePoint through Code
    调试工具
    Sublime Text 3编译Sass
    js储存参数的数组arguments
    js 判断客户端浏览器
    手机设计尺寸
    required
    前端工具HBuilder安装Sass插件
    apache极简配置虚拟机
    跳转输入框按键操作
  • 原文地址:https://www.cnblogs.com/ay742936292/p/11047817.html
Copyright © 2011-2022 走看看