19 用户认证组件 编辑
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')
html模板
<body> <h1>Index</h1> 欢迎:{{ request.user.username }} </body>
auth注销
view视图:
def logout(request): auth.logout(request) return redirect('/login/')
html模板:
<body> <h1>Index</h1> 欢迎:{{ request.user.username }} {% if not request.user.is_anonymous %} <a href="/logout/">注销</a> {% endif %} </body>
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')
修改密码:
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
用户认证装饰器
from django.contrib.auth.decorators import login_required
在需要认证后才能访问的页面上添加装饰器
@login_required def logout(request): auth.logout(request) return redirect('/login/')
会自动跳转到默认的地址
在setting文件中指定LOGIN_URL=配置
LOGIN_URL='/login/'
next参数是登录成功后跳转的连接