from django.contrib import auth
默认数据库中使用auth_user表html
python manage.py createsuperuser
auth.authenticate(request,username,password)
校验用户密码和帐号,经过返回具体的用户对象python
auth.login(request,user)
接受request和前面经过登录验证的user对象,将session key保存在浏览器,数据保存在django_session表中。数据库
用来装饰须要登录后给浏览器添加session后才能访问的视图添加检测,若是有session则放行,不然跳转指定页面,一般咱们设置成登录页面。django
#导入auth 登录装饰器 from django.contrib.auth.decorators import login_required #在须要登录后才能访问的页面视图前面添加装饰器 @login_required def index(): pass
这样浏览器在访问index页面时,会先检查是否有session,若是没有,则跳转默认页面,并将原访问页面做为get参数放在跳转页面中,在登录成功后会跳转以前要访问的页面浏览器
http://127.0.0.1:8000/accounts/login/?next=/index/ # 例如我要访问index页面,可是我没session, # 这时装饰器会默认跳转到/accounts/login/页面, # 并将index页面的url以next参数的形式包含在其中 #,这样在你登录后,还能返回原页面
能够在django的settings中修改装饰器默认跳转的Urlsession
#配置auth认证登录装饰器的默认跳转地址 LOGIN_URL = '/login/'
auth.logout(request)
接受一个request,清除当前request中的session并在数据表中django_session数据也会被清除。
经常使用方法,搭配一个视图使用:app
def logout(request): auth.logout(request) return redirect('/login/')
例如在页面上使用a标签和button按钮点击跳转注销视图,注销后跳回登录页面ui
auth组件的中间间中作了这样一个事情,当request请求来时,判断是否有session,若是有session则会根据session去django_session中找出相应的用户的信息,并赋值给request.user属性,也就是request.user=user是一个User数据对象,不然返回一个匿名的对象给request.user,该对象调用全部的方法都返回None加密
def index(request): print(request.user) # 是一个懒加载数据对象
这时咱们能够把request.user看成一个普通的orm中的数据对象url
判断用户对象是否经过了校验
request.user.is_authenticated # 返回一个布尔值
from django.shortcuts import render,HttpResponse,redirect from django.contrib import auth from django.contrib.auth.decorators import login_required # Create your views here. def login(request): if request.method=='POST': username = request.POST.get('username') pwd = request.POST.get('password') print(username,pwd) #利用auth验证用户名和密码是否正确验证成功实例化一个数据对象不然返回none user = auth.authenticate(request,username=username,password=pwd) if user: #登陆成功后,给登陆用户在request中增长session,存在数据库 auth.login(request,user) return redirect('/index/') else: msg = '错误' print('用户名错误') return redirect('/index/') return render(request,'login.html') def logout(request): auth.logout(request) return redirect('/login/') @login_required() def index(request): print(request.session.__dir__) print(request.user.password) return render(request,'Index.html')
由于auth中的用户表存的密码是密文形式,因此不能直接使用orm中creat语句
#导入user表 from django.contrib.auth.models import User def register(request): form_objs = UserInfoForm() if request.method=='POST': form_objs= UserInfoForm(request.POST) if form_objs.is_valid(): username = form_objs.cleaned_data['name'] password = form_objs.cleaned_data['pwd'] #只能使用auth表的create_user方法去建立用户 User.objects.create_user(username=username,password=password) return redirect('/login/') return render(request,'register.html',locals())
建立超级用户的方法和上面同样,只不过变成User.objects.create_superuser
在用户登录成功后一般须要验证密码和修改密码,auth组件也提供了相应的方法
# user为User表具体的对象,接受一个密码,返回布尔值 user.check_password(password) # user为User表具体的对象,接受一个密码,修改原密码,必定要记得save()保存 user.set_password(password) user.save()
from django.db import models # Create your models here. from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): #编写扩展字段,而后去settings告诉django auth组件会用这张表 phone =models.CharField(max_length=11)
AUTH_USER_MODEL = app01.UserInfo #格式:app名称.表名
auth认证 默认Django内置的认证系统, 默认在数据库中使用auth_user from django.contrib import auth 1. 建立一个超级用户 python manage.py createsuperuser 2. 验证用户名和密码是否正确 user = auth.authenticate(request, username, password) 3. 登陆 auth.login(request, user) --> user是上一步的获得的user对象 4. 注销 auth.logout(request) --> 将当前请求的session数据删除 5. 登陆认证的装饰器 auth.decorators.login_required 默认跳转的登陆url: /accounts/login/ 在settings.py中 配置 LOGIN_URL = "你的登陆url" 6. is_authenticated() 判断当前request.user是否通过认证,通过认证就返回True,不然是False 7. AuthenticationMiddleware中间件究竟作了什么? request.user = user, 匿名用户对象 auth_user表的方法 8. create_user() 建立用户,不一样与普通orm目的是使密码加密保存 9. create_superuser() 建立超级用户 10. check_password() 检查密码 11. set_password() 设置密码