zoukankan      html  css  js  c++  java
  • Django day16 Auth组件

    一:Auth组件
    -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码...
    -怎么用?
    (1)先创建超级用户:
    -python3 manage.py createsuperuser
    -输入用户名,邮箱,密码,敲回车,这样就创建出一个超级用户
    -也就是在auth_user这个表中插入了一条数据(密码是加密的,所以不能动手插入)
             (2)验证用户:
    -from django.contrib import auth
    -user = auth.authenticate(request,username = name,password= pwd)
    -相当于在查询:uesr = models.User.objects.filter(name=name,pwd=pwd).first()
    	     -如果校验通过,会返回一个user对象,通过判断user对象,校验是否验证成功
    # 在views.py中
    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    from django.contrib import auth
    
    
    def login(request):
        if request.method == 'GET':
    
            return render(request, 'login.html')
        elif request.method == 'POST':
            name = request.POST.get('name')
            pwd = request.POST.get('pwd')
            user = auth.authenticate(request, username=name, password=pwd)
    
            if user:
                auth.login(request, user)
                return HttpResponse('登陆成功')
            else:
                return HttpResponse('用户名或密码错误')
    
    
    
    
    # 在login.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="" method="post">
        {% csrf_token %}
        <p>用户名: <input type="text" name="name"></p>
        <p>密码:<input type="text" name="pwd"></p>
        <p><input type="submit" value="提交"></p>
    </form>
    </body>
    </html>
    用户的注册验证
              (3)登录:
    -auth.login(request,user)
    -就是在session中写了一条数据
    (4)一旦登录成功,调了这个函数login(request,user)
    -在视图类,函数中的request对象中,就有一个user对象,就是当前登录的用户对象
    -如果没有登录,request.user=AnonymousUser,匿名用户
       (5)注销
    -auth.login(request)
    -内部:调用了request.session.flush().删除了登录状态
    (6)登录认证装饰器
    -from django.contrib.auth.decorators import login_required
    @login_required(redirect_field_name='zzd',login_url='/login/')
    -request_field_name:修改?后面的key值,
    -login_url:如果没有登录,跳转到的页面
    -可以局部配置
    -可以全局配置(在settings中)
    # 全局的配置,如果没有登录,跳到这个路由
    LOGIN_BRL='/login/'
    (7)创建用户:
    -from django.contrib.auth.models import User
    -创建超级用户和普通用户
    # 不能用create
    # user=User.objects.create(username-name,password=pwd)
    # 创建超级用户
    # user=User.objects.create_superuser(username=name,password=pwd)
    # 创建普通用户
    # user=User.objects.create_user(username=name,password=pwd)
    (8)校验密码:
    -request.user.check_password(pwd)
    -先拿到用户(可以是登录,;也可以是现查)
    (9)修改密码:
    -user.set_password(pwd)
    -user.save()
    -注意:一定要调用save(),否则是不保存的
    (10)is_authenticated()
    -如果通过验证,是true,反之是false
    (11)其他方法(了解):
    -is_active:禁止登录网站(用户还存在,封号)
    -is_staff:是否对网站有管理权限(能不能登录admin)
    (12)删除用户
    -orm删除

    二: 如果想在认证组件上加手机号等其他字段:如何处理?
    (1)定义一个表模型,跟User一对一管理
    class UserDetail(models.Model):
    phone=models.CharField(max_length=32)
    # 一对一跟auth_user表做关联
    # 如果是从外部引入的表模型,是不能加引号的
    # 如果加引号,只是在当前model找
    user=models.OneToOneField(to=User)

         (2)定义一个表模型,继承(AbstractUser)
    from django.contrib.auth.models import AbstractUser
    class UserInfo(AbstractUser):
    # username,password...都有
    phone=models.CharField(max_length=32)
    sex=models.BooleanField()
    
    在settings中配置:
    AUTH USER_MODEL='app01.UserInfo'

          -做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo
    -原来auth中的其他操作:
    -authentication
    -login
    -logout
    -set_password
    ...
    一样用,完全一样
    -不一样的地方:
    之前用到User这个表模型的地方,都换成UserInfo


  • 相关阅读:
    ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
    ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
    Asp.Net Core 单元测试正确姿势
    如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch
    Asp.Net Core2.2 源码阅读系列——控制台日志源码解析
    使用VS Code 开发.NET CORE 程序指南
    .NetCore下ES查询驱动 PlainElastic .Net 升级官方驱动 Elasticsearch .Net
    重新认识 async/await 语法糖
    EF添加
    EF修改部分字段
  • 原文地址:https://www.cnblogs.com/zedong/p/10021611.html
Copyright © 2011-2022 走看看