auth组件
auth是帮助我们封装了注册,登录,安全验证,修改密码,安全退出于一体的模块,省了我们许多步骤。
在我们生成表的时候会我们创建一张auth_user表,他是我们使用auth模块存放用户信息的地方。
使用先导入模块:
from django.contrib import auth
登录使用authenticate()来连接auth_user表查找数据来验证前台发来的用户名和密码:
user_obj = auth.authenticate(request, username=username, password=pwd)
数据比对成功后会有一个返回对象,并且这个对象在视图函数里可以使用,如果有值使用auth.log来设置cookie和session。
if user_obj: ####设置session auth.login(request, user=user_obj) 作用: 1. 设置cookie, session 2. 生成request.user的对象, 这个对象可以在视图函数中使用 3. request.user这个对象 相当于 request.session
如果每一个视图函数都要进行身份验证的话,每次都写会烦人的,别人6点下班,你10点,解决这个问题使用装饰器呀。
装饰器使用方法有两个,1 在函数上方使用装饰器,2 在全局配置验证跳转。两种方式大致上差不多,第二种方式不用再带上跳转的url。
导入模块包:
from django.contrib.auth.decorators import login_required
1 函数上方使用:
@login_required(login_url='/login/') def index2(request): return HttpResponse('index2')
2 全局配置跳转,在settings中配置:
LOGIN_URL = "/login/"
函数上方使用:
@login_required def index3(request): return HttpResponse('index3')
注册
导入模块:
from django.contrib.auth.models import User
向表中添加数据时,可以选择添加为超级用户和普通用户不同之处是超级用户必须填写电子邮箱地址。在表中数据字段上也有身份上的不同
User.objects.create_superuser(username=username, password=pwd, email='111@qq.com') User.objects.create_user(username=username, password=pwd)
具体示例:
from django.contrib.auth.models import User def register(request): if request.method == 'GET': return render(request, 'register.html') else: username = request.POST.get('username') pwd = request.POST.get('pwd') # User.objects.create(username=username, password=pwd) User.objects.create_superuser(username=username, password=pwd, email='111@qq.com') User.objects.create_user(username=username, password=pwd) return HttpResponse('successs')
修改密码
这个功能是要基于用户已经登陆成功以后才可以执行的。执行得大致思路为在前台让用户输入原先的密码,和新密码,后台
先判断旧密码是否与表中的密码一致(request.user.check_password(old_password)),一致后修改成新密码(request.user.set_password),最后这里需要要进行保存(request.user.save)
示例:
- 修改密码 @login_required(login_url='/login/') def modify(request): if request.method == 'GET': return render(request, 'modify.html') else: old_pwd = request.POST.get('old_pwd') res = request.user.check_password(old_pwd) ### 检测老密码 if res: new_pwd = request.POST.get('new_pwd') request.user.set_password(new_pwd) ### 设置新密码 request.user.save() #### 保存 return HttpResponse('ok')
安全退出
def logout(request): auth.logout(request) return HttpResponse('安全退出')