Django框架(十三)——Auth模块

Auth模块数据库

1、什么是auth模块django

Auth模块是Django自带的用户认证模块后端

Auth模块是Django自带的用户认证模块,能够实现包括用户注册、用户登陆、用户认证、注销、修改密码等功能。默认使用 auth_user 表来存储用户数据。session

2、Auth模块使用app

1.建立超级用户  (createsuperuser)函数

建立超级用户就是在auth_user表中插入数据,密码是加密的。网站

在  Run manage.py Task  建立ui

createsuperuser

2.查询用户(authenticate())加密

验证用户名以及密码是否正确,通常须要username 、password两个关键字参数。若是认证成功(用户名和密码正确有效),便会返回一个 User 对象url

from django.contrib import auth
user_obj = auth.authenticate(request, username=name, password=pwd)

不能使用filter这种查询方法,由于user表存的密码是加密的

models.User.objects.filter(username=username,password=password).first()

3.登陆用户(login())

该函数接收一个HttpRequest对象,以及一个通过查询认证的user_obj

登陆以后,会将用户状态记录到session中

from django.contrib import auth

auth.login(request,user_obj)

4.登陆成功

只要执行了上面那句话登陆成功,你就能够在后端任意位置经过request.user获取到当前用户对象

user_obj = request.user

5.判断用户是否登陆(is_authenticated)

用来判断当前请求是否经过了认证,若是经过就是true,反之false

request.user.is_authenticated

6.登陆认证装饰器

快捷的给某个视图添加登陆校验。

若用户没有登陆,则会跳转到django默认的登陆URL'/accounts/login/',并传递当前访问url的绝对路径(登陆成功后,会重定向回到该路径)

若是自定义了登陆URL,则须要在settings.py文件中经过LOGIN_URL 设置登陆路径

from django.contrib.auth.decorators import  login_required

@login_required(login_url='/xxx/')  # 局部配置 直接在装饰器里面写一个登陆路径
def index(request):
    pass
    
# 全局配置 settings文件中写 LOGIN_URL = '/xxx/' 设置完后直接写装饰器 @login_required 就能够

7.注册超级用户和普通用户

错误方法:User.objects.create(username =username,password=password)  # 建立用户名的时候 千万不要再使用create 了
User.objects.create_user(username =username,password=password)  # 建立普通用户
User.objects.create_superuser(username =username,password=password,email='123@qq.com')  # 建立超级用户  邮箱必填

8.校验密码(check_password())

#校验密码
request.user.check_password(old_password)

9.修改密码(set_password())

注意:修改密码的时候,必定要save保存,不然不会生效

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

10.退出登陆(logout())

当调用该函数时,当前请求的session信息会所有清除,至关于request.session.flush().该用户即便没有登陆,使用该函数也不会报错

auth.logout(request)

11.User对象的其余属性

# 在网站上线之前,将is_active和is_staff设置为False
is_active    # 禁止登陆网站(用户还存在,封号)
is_staff    # 是否对网站有管理权限(能不能登陆admin)

request.user.is_active = False
request.user.is_staff = False

3、自定义auth_user表

1.方法一:定义一个表模型,跟User一对一关联(不推荐使用)

from django.contrib.auth.models import User

class UserDetail(models.Model):
    phone=models.CharField(max_length=32)
    # 一对一跟auth_user表作关联
    # 若是是从外部引入的表模型,是不能加引号的
    # 若是加引号,只是在当前model找
    user=models.OneToOneField(to=User)

2.方法二:使用类的继承,继承(AbstractUser)

from django.contrib.auth.models import AbstractUser

class Userinfo(AbstractUser):
    # 千万不要跟原来表中的字段重复 只能创新
    phone = models.BigIntegerField()
    avatar = models.CharField(max_length=32)

注意:

1.一旦咱们经过继承来实现扩展auth_user表,那么作数据库迁移,之后就没有auth_user这个表了,之后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方所有要用新的表模型——UserInfo(这个是你自定义的模型类) 2.告诉django再也不使用auth默认的表,而是使用你自定义的表,须要在settings.py中设置
AUTH_USER_MODEL = 'app01.Userinfo'   '应用名.类名'
相关文章
相关标签/搜索