Django框架之Auth模块
一、什么是Auth认证模块
auth模块简介
auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象,
而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中。除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录。
二、auth模块常用方法
首先导入:from django.contrib import auth
authenticate()
验证用户名以及密码是否正确,如果认证信息有效,会返回一个 User 对象。
login()
使用django的session框架给某个已认证的用户附加上session id等信息。
from django.contrib import auth
def auth_login(request): if request.method =='POST': username = request.POST.get('username') password = request.POST.get('password') #查找用户对象 user_obj = auth.authenticate(request,username=username,password=password) if user_obj: # request.session['name'] = 'night' auth.login(request,user_obj) #保存用户状态 return HttpResponse('ok') return render(request,'auth_login.html')
logout(request) 注销用户
调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
is_authenticated()
用于检查用户是否已经通过了认证。
def auth_index(request): print(request.user.is_authenticated()) #判断当前用户是否登录 print(request.user,type(request.user)) #获取当前用户登录对象 return HttpResponse('auth_index') def auth_logout(request): auth.logout(request) #退出登录,删除session return HttpResponse('logout')
create_user函数创建用户
def auth_reg(request): if request.method =='POST': username = request.POST.get('username') password = request.POST.get('password') user_obj = auth.authenticate(request, username=username) if user_obj: return HttpResponse('该用户已经存在') # User.objects.create() 不能再使用create创建 User.objects.create_user() #仅不是superuser # User.objects.create_superuser() return render(request,'auth_reg.html')
check_password(passwd)核对密码
用户需要修改密码的时候 首先要让他输入原来的密码 ,如果给定的字符串通过了密码检查,返回 True
使用 set_password() 来修改密码
def auth_password(request): print(request.user.password) is_res = request.user.check_password('night') if is_res: request.user.set_paaword('789') request.user.save() return HttpResponse('OK')
装饰器配置
from django.contrib.auth.decorators import login_required @login_required(login_url='/auth_login/') #局部配置 def auth_home(request): return HttpResponse('请登录后访问')
#全局配置,在settings文件夹中写入
LOGIN_URL='/auth_login/'
三、自己创建User表
以上的所有操作,都是针对django自动创建的auth_user表,而如果要用auth模块,就必须要使用(或继承)这张表。
继承表的好处是我们可以增加一些自己需要的字段,并且同时可以使用auth模块提供的接口、方法。
继承auth的方法:
1、导入AbstractUser类,并且写一个自定义的类,继承AbstractUser类
class Userinfo(AbstractUser): phone = models.CharField(max_length=32) avatar = models.CharField(max_length=32)
UserInfo表里就不需要有auth_user里重复的字段了,比如说username以及password等,但是还是可以直接使用这些字段的,并且django会自动将password进行加密
2、这样写完之后,还需要在setting.py文件里配置:
# AUTH_USER_MODEL = "app名.models里面对应的模型表名" AUTH_USER_MODEL = 'app01.Userinfo'