auth认证模块
auth认证模块
django给我们提供了一个可以快速完成用户相关功能的模块,那就是auth认证模块,包含用户创建、认证、编辑等。
也提供了一张用户表,这张表是在我们执行数据库迁移命令之后默认产生的:auth_user表,里面记录了用户的各种信息。
创建django自带的路由url(r'^admin/', admin.site.urls)就是参考这张表的信息认证的。
其中is_superuser字段就是判断这个用户是否是管理员用的,我们可以自己创建一个管理员。
进入run manage.py task终端,输入:
createsuperuser
然后按照提示信息输入就可以了,这时候我们就可以访问django自带的admin路由去登录了。
随便一提,auth_user中的密码是经过加密处理后保存的,有更高的安全性。
auth模块方法
要使用auth模块首先要导入:
from django.contrib import auth # 主要模块
from django.contrib.auth.models import User # 用户表
创建普通用户:根据auth_user表添加,username字段必填
User.objects.create_user(username=,)
创建管理员用户:根据auth_user表添加,username、password、email字段必填
User.objects.create_superuser(username=,password=,email=)
验证用户名和密码是否正确:返回一个用户对象,可以获取其他字段信息,用户名和密码错误返回None。
user_obj = auth.authenticate(request,username=username,password=password)
保存用户登录状态:自动帮你操作session相关
auth.login(request, user_obj)
获取当前用户对象:返回当前登录的用户对象,没有登录则返回AnonymousUser对象,里面没有信息
user_obj = request.user
判断当前用户是否登录:返回布尔值
request.user.is_authenticated()
比对密码是否与当前登录用户相同:返回布尔值
request.user.check_password('password')
修改密码:需要保存
request.user.set_password('new_password')
request.user.save() # 同步到数据库中
注销当前已登录用户:即删除seesion
auth.logout(request)
校验登录装饰器:
导入:
from django.contrib.auth.decorators import login_required
局部配置:login_url即未登录用户跳转的路由地址
@login_required(login_url='/login/')
全局配置:默认跳转到/accounts/login/
@login_required
可以在settings.py配置文件中配置全局:
LOGIN_URL = '/login/' # 在配置文件中添加路由地址
auth扩展表字段
如果想要在原有的auth_user表上扩展表字段,有两种方式:
方式一:编写一对一表关系,自己创建一张表,与auth_user建立一对一关系即可。
方式二:自己在模型层创建一个类去继承auth的用户类。
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
# 编写AbstractUser类中没有的字段,不能冲突
phone = models.BigIntegerField()
addr = models.CharField(max_length=32)
编写完类后,还需要去settings.py配置文件里添加配置:app01是我的应用名,并且添加配置不需要写models路径
AUTH_USER_MODEL = 'app01.MyUser'
补充:
- 类继承之后,需要重新执行数据库迁移命令,并且库里面是第一次操作迁移命令才可以,也就是auth_user表还没有被创建之前才能生效。
- auth模块所有的方法都可以直接在自定义模型类上面使用,因为是继承关系。