认证系统
auth模块
-
auth_user
表:-
auth_user表存储用户信息
-
模块导入
from django.contrib import auth
-
命令行添加用户. auth_user表是django自带,并不是models.py创建
python manage.py createsuperuser
-
auth_user表结构
username: 用户名. 150字符,唯一 first_name: 30字符. 可为空 last_name: 30字符, 可为空 email: 可为空 password: 哈希加密后的密码 is_staff: 是否可进入admin站点.是否为员工.不使用admin可以忽略 is_active: 是否可用.如要删除账号的数据,设置此值为false,不是真正的从数据库删除 is_superuser: 是否超级管理员,超级管理员拥有整个网站的所有权限 last_login: 上次登陆时间 date_joined: 账号创建时间
-
-
auth_user
方法:-
authenticate(username=.., password=…)
- 用户认证,验证用户名和密码
- 需要username,password两个关键字参数,即auth_user表字段
- 用户名和密码认证:即auth_user表是否存在记录
- 认证成功: 返回
user对象
- 认证失败: 返回
None
- 认证成功: 返回
from django.contrib.auth import authenticate # 方法导入 user_obj = auth.authenticate(username='sunny', password='password')
-
**login(HttpRequest, user)
**- 用户登陆. 本质上会在后端为该用户生成相关的session数据, 保持会话
- 参数: HttpRequest对象. 经过认证的user对象
- 使用django的session框架给某个已认证的用户附加上session id等信息
from django.contrib.auth import authenticate, login user_obj = auth.authenticate(username='sunny', password='password') if user_obj: # 保存用户状态信息 login(request, user_obj) # request.session['session_id']=user_obj.pk # redirect to a sucess page. ..... else: # return an 'invalid login' error message .....
-
没有经过login方法封装的用户, 是匿名用户
-
只要使用login(request, user_obj)之后,request.user 就能取得当前登陆的用户对象. 否则request.user得到的是一个匿名用户对象(AnonymousUser Object, request.user默认值), 值都为空或false
-
request.user对象本身是全局对象,可以直接在模板中使用{{request.user.username}}
详见
AuthenticationMiddleware
中间件源码
-
logout(request)
- 注销用户, 当前请求的用户session信息全部清除
- 用户没有登陆,使用该函数也不会报错
- 无返回值
from django.contrib.auth import logout def logout_view(request): logout(request) # redirect to login page
-