auth模块

auth模块

当涉及到用户相关功能的时候就可以考虑使用auth模块
特别提醒: 如果使用auth模块就去使用全套的,不是自己写一部分,用别人一部分

如何创建超级用户,用户登录django admin的后台管理

在tools里面的run manage.py 点击过后输入终端命令 createsuperuser

校验用户是否存在

先导包 from django.contrip import auth
user_obj = auth.authenticate(username=username, password=password)
在django.user表中校验用户是否存在
如果用户存在就返回一个用户对象,不存在就返回一个None

保存用户登录状态

auth.login(request, user_obj)
保存的是校验用户是否存在时生成的对象
只要保存了用户登录状态,只要有request的地方就可以拿到用户对象(利用session实现,默认会执行一个request.session[键]=值)

判断当前用户是否登录

request.user.is_authenticated()
返回值是布尔类型

获取当前用户对象

在保存用户状态时就说过有request的地方就可以拿到用户对象
通过: request.user
拿到对象就可以点取值到对象的一些字段属性

如何给视图函数加上校验用户是否登录的登录认证

先导入包:
from django.contrib.auth.decoration import login_required
这个就是一个装饰器,有两种配置方法

局部配置

局部需要指定跳转页面,具体格式如下,优先级最高

@login_required(login_url='/login/')
def home(request):
    ...

全局配置

先到settings.py文件夹下面去添加一个配置

LOGIN_URL='/login/'  # 指定没有登陆默认跳转的页面为 login 页面

在添加装饰器(全局不用指定,直接加)

@login_required
def home(request):
    ...

修改密码

校验原密码是否正确

bool = request.user.check_password(old_password)

返回值是布尔类型

设置新密码

request.user.set_password(new_password)
requset.user.save()

记住使用完set_password的时候一定要执行save,不然是无效操作

用户的注册

先导包
form django.contrib.auth.models import User
这一步操作就是相当于把User这张表取出来

# 创建普通用户
User.objects.create_user(username=username, password=password)
# 创建超级用户(创建超级用户必须要传邮箱参数)
User.objects.create_superuser(username=username, password=password, email='123@qq.com')

还有一种之前的往数据库里面直接创建一条数据的create 我们是没法和auth一起使用的,因为保存在数据库里面的密码都是经过加密的,使用create 创建的数据中密码是没有经过加密的.

扩展auth_user表的字段

第一种(利用一对一关系):

不好用

第二种(继承):

  1. 自己写一个类,继承原来的auth_user类,也就是继承 AbstractUser
  2. 然后在setting配置文件中,通过AUTH_USER_MODEL = '应用名.表名'来告诉django要用新建的类来代替auth_user表
    AUTH_USER_MODEL = '应用名.表名' (一定要配置)
1. models.py 

# 先导入包
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    tel = models.IntegerField()
    ...
    

注意:

  1. 当继承了AbstractUser之后,我们自定义的字段名不能和之前的字段一样
  2. 通过上面的方式继承了的表还可以使用auth的所有功能
  3. 如果在配置前已经执行了数据库迁移命令,就不能再创建了.
原文地址:https://www.cnblogs.com/xiongchao0823/p/11774156.html