• 19 用户认证组件 编辑


    添加新博客 编辑本博客

    yuan先生博客

    auth对象

    authenticate

    from django.contrib import auth

    用户认证组件:

    功能:用session记录登录验证状态

    前提:用django的auth_user用户表

    auth模块api:

    • user=auth.authenticate(username=user,password=pwd)#如果验证成功,返回该用户对象,否则返回none
    • auth.login(request,user)    #request.user=user,始终为当前用户,没有该操作则request.user为匿名用户
    • auth.logout(request)

    user模块api:

    from django.contrib.auth.models import User

    • print(request.user.is_authenticated)#判断用户是否验证通过
    • user=User.objects.create_user(username=user,password=pwd)#添加用户
    • user.set_password(r_pwd)#修改密码

    匿名用户对象特点:

    • id永远为none
    • username永远为空字符串
    • get_username()永远返回空字符串
    • is_staff和is_superuser永远为false
    • groups和user_permissions永远为空
    • is_anonymous()返回True,非False
    • is_authenticated()返回False,非True
    • set_password(),set后需要保存user.save()、check_password()、save()、delete()都引发NotImplementedError错误
    • 1.8版本后新增AnonymousUser.get_username()

    request.user是一个全局变量,在任何视图和模板中都可以使用

    创建超级用户:python manage.py createsuperuser
    创建普通用户:python manage.py createuser

    view视图

    from django.contrib import auth
    def login(request):
        if request.method=='POST':
            user=request.POST.get('name')
            pwd=request.POST.get('pwd')
            #如果验证成功,返回该用户对象,否则返回none
            user=auth.authenticate(username=user,password=pwd)
            if user:
                auth.login(request,user)    #request.user=user,始终为当前用户,没有该操作则request.user为匿名用户
                return redirect('/index/',)
            return render(request, 'login.html')
        else:
            return render(request,'login.html')
    def index(request):
        user=request.user#当前登录用户对象
        print(user.is_anonymous)#判断是否是匿名账号
        print(user)
        return render(request,'index.html')
    View Code

    html模板

    <body>
    <h1>Index</h1>
    欢迎:{{ request.user.username }}
    </body>
    View Code

    auth注销

    view视图:

    def logout(request):
        auth.logout(request)
        return redirect('/login/')
    View Code

    html模板:

    <body>
    <h1>Index</h1>
    欢迎:{{ request.user.username }}
    {% if not request.user.is_anonymous %}
        <a href="/logout/">注销</a>
    {% endif %}
    </body>
    View Code

    User对象

    user.is_anthenticated()判断是否验证登录成功

    创建用户:

    def reguser(request):
        if request.method=='POST':
            user=request.POST.get('name')
            pwd=request.POST.get('pwd')
            user=User.objects.create_user(username=user,password=pwd)
            print(user)
            return redirect('/login/')
        return render(request,'reguser.html')
    View Code

    修改密码:

    def editpwd(request):
        if request.method=='POST':
            user = request.POST.get('name')
            pwd = request.POST.get('pwd')
            r_pwd=request.POST.get('r_pwd')
            user=User.objects.get(username=user)
            if user.check_password(pwd):
                user.set_password(r_pwd)
                user.save()
            else:
                pass
    View Code

    用户认证装饰器

    from django.contrib.auth.decorators import login_required

    在需要认证后才能访问的页面上添加装饰器

    @login_required
    def logout(request):
        auth.logout(request)
        return redirect('/login/')
    View Code

    会自动跳转到默认的地址

    在setting文件中指定LOGIN_URL=配置

    LOGIN_URL='/login/'

     next参数是登录成功后跳转的连接

     

  • 相关阅读:
    MyBatis Plus + Activiti 整合报错:org.springframework.beans.factory.UnsatisfiedDependencyException
    SQLTransientConnectionException: HikariPool-1
    深入分析Spring Boot2,解决 java.lang.ArrayStoreException异常
    vim命令
    Spring Security + JWT实现前后端分离权限认证
    前后端分离之JWT用户认证(转)
    MySQL高可用性之Keepalived+MySQL(双主热备)
    Linux下开启mysql数据库的远程访问权限
    Mysql主要索引方式:FULLTEXT,HASH,BTREE,RTREE。
    按照时间段查询日志文件
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9350288.html
Copyright © 2020-2023  润新知