auth认证模块

auth认证模块

django给我们提供了一个可以快速完成用户相关功能的模块,那就是auth认证模块,包含用户创建、认证、编辑等。

也提供了一张用户表,这张表是在我们执行数据库迁移命令之后默认产生的:auth_user表,里面记录了用户的各种信息。

image

创建django自带的路由url(r'^admin/', admin.site.urls)就是参考这张表的信息认证的。

其中is_superuser字段就是判断这个用户是否是管理员用的,我们可以自己创建一个管理员。

进入run manage.py task终端,输入:

createsuperuser

然后按照提示信息输入就可以了,这时候我们就可以访问django自带的admin路由去登录了。

image

随便一提,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'

补充:

  1. 类继承之后,需要重新执行数据库迁移命令,并且库里面是第一次操作迁移命令才可以,也就是auth_user表还没有被创建之前才能生效。
  2. auth模块所有的方法都可以直接在自定义模型类上面使用,因为是继承关系。
posted @ 2022-05-25 20:26  Yume_Minami  阅读(90)  评论(0编辑  收藏  举报