auth模块是对登录认证方法的一种封装,之前咱们获取用户输入的用户名和密码后需要自己从相应的用户信息表里查询有没有用户名和密码符合的对象,而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中。
除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录
咱们可以依赖auth模块来实现注册、登录、注销、修改密码这些操作。
注册操作
需要要从auth模块导入user方法
User 对象属性:username, password(必填项)password用哈希算法保存到数据库
is_staff : 用户是否拥有网站的管理权限.
is_active : 是否允许用户登录, 设置为``False``,可以不用删除用户来禁止 用户登录
auth模块默认使用auth_user这张表
create_user用来创建普通用户
from django.contrib.auth.models import User
首先要从auth模块导入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='[email protected]')
create_superuser是生成超级用户(管理员)
User.objects.create_user(username=username, password=pwd)
return HttpResponse('successs')
登陆操作
登陆操作会用到 authenticate() 和 login(HttpRequest, user)两个方法
authenticate()
提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数
如果认证信息有效,会返回一个 User 对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!!
login(HttpRequest, user)
login接受一个HttpRequest对象,以及一个认证了的User对象
此函数使用django的session框架给某个已认证的用户附加上session id等信息
from django.contrib import auth
user_obj = auth.authenticate(request, username=username, password=pwd)
## authenticate: 主要是从auth——user这张表中查询比较 数据, 返回一个user_obj对象
if user_obj:
####设置session
auth.login(request, user=user_obj)
作用:
1. 设置cookie, session
2. 生成request.user的对象, 这个对象可以再视图函数中使用
3. request.user这个对象 相当于 request.session