zoukankan      html  css  js  c++  java
  • 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参数是登录成功后跳转的连接

     

  • 相关阅读:
    [其他]将Windows Terminal添加到右键菜单
    [VS Code]在自己的Ubuntu服务器上构建VSCode Online
    [Go]goFileView-基于Golang的在线Office全家桶预览
    [Go]基于Go语言的Web路由转发,多个网站共享一个端口(新版本,支持WebSocket)
    [WSL]在Windows10子系统里安装运行桌面(xUbuntu)
    [Go]使用Golang对鸢尾花数据集进行k-means聚类
    [Python+JavaScript]JS调用摄像头并拍照,上传至tornado后端并转换为PIL的Image
    [Python]Python基于OpenCV批量提取视频中的人脸并保存
    [WSL]Windows10 Ubuntu子系统编译安装线程安全版LAMP
    [Go]基于Go语言的Web路由转发,多个网站共享一个端口(存在问题,已经抛弃,新解决方案请看新博客)
  • 原文地址:https://www.cnblogs.com/yaya625202/p/9350288.html
Copyright © 2011-2022 走看看