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参数是登录成功后跳转的连接

 

posted @ 2018-07-22 15:24  丫丫625202  阅读(133)  评论(0编辑  收藏  举报