Django auth模块

auth模块

一.Auth模块是什么

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

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

执行数据库迁移命令之后,会生成很多表,其中的auth_user是一张用户相关的表格

其他补充:

# createsuperuser  创建超级用户
这个超级用户就可以拥有登陆django admin后台管理的权限

 

二.Auth模块的使用

from django.contrib import auth

 

<1> authenticate() 验证方法

1.提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。(会将password参数转为密文与auth_user表中的密码校验)
2.如果认证成功(用户名和密码正确有效),便会返回一个 User 对象,若不成功返回None
user_obj = auth.authenticate(username=username,password=password)
# 必须要用auth.authenticate 因为数据库中的密码字段是密文的 而你获取的用户输入的是明文
print(user_obj)  #  返回的就是用户对象
print(user_obj.username)  # 用户名
print(user_obj.password)  # 密文密码

 

<2> login() 登录状态方法

1.该函数接受一个HttpRequest对象,以及一个经过authenticate认证的User对象。
2.将用户状态记录到session中,并返回到前端浏览器中
auth.login(request,user_obj)  # 将用户状态记录到session中
# 类似 request.session['user'] = user_obj
"""
只要执行了这一句话,你就可以在前后端任意位置通过request.user获取到当前用户对象
"""

 

补充 匿名用户:

def foo(request):
    print(request.user)  # AnonymousUser 如果没有执行auth.login那么拿到的是匿名用户
    return HttpResponse('foo')

 

<3> is_authenticated() 判断是否登录方法

print(request.user.is_authenticated) # 判断用户是否登录,返回bool值,只有执行了auth.login才为True

 

<4> login_required 登录装饰器

from django.contrib.auth.decorators import  login_required

 

(1)局部配置

@login_required(login_url='/login/')  # login_url参数 从定向到login页面(若用户没有登录测重定向到 /login/ )
def func(request):
    return HttpResponse('func')

 

(2)全局配置

在settings文件中:
LOGIN_URL = '/login/'  # 若没登录则从定向到login页面
​
@login_required
def func(request):
    return HttpResponse('func')

 

<5> logout() 退出登录方法

1.该函数接受一个HttpRequest对象,无返回值。
2.当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
def logout(request):
    auth.logout(request)
    # 类似 request.session.flush()
    return HttpResponse('logout')

 

<6> check_password() 查看密码方法

# 获取用户密码自动加密,去数据库校验当前用户的密码是否一致
is_right = request.user.check_password(password)  # 返回bool值

 

<7> set_password() 修改密码方法

request.user.set_password(new_password)
request.user.save()  # 修改密码的一定要save方法保存,否则无效

 

<8> create_user() 与 create_superuser()

auth 提供的一个创建新的普通用户和超级用户的方法,需要提供必要参数(username、password)等。
from django.contrib.auth.models import User
User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

 

 

补充:

扩展默认的auth_user表(自定义auth_user表)

from django.contrib.auth.models import AbstractUser

 

<第一步> 在models.py文件中创建自定义表

from django.contrib.auth.models import  AbstractUser
​
# 扩展anth_user表的方法 使用类的继承
class Userinfo(AbstractUser):
    # 新增加的字段不要和原来的auth_user表中的字段冲突
    phone = models.BigIntegerField()
    avatar = models.CharField(max_length=32)

 

<第二步> 在settings.py文件中

# 告诉django  orm不再使用auth默认的表  而是使用你自定义的表
AUTH_USER_MODEL = 'app01.Userinfo'  # '应用名.类名'

 

<第三步> 配置MySQL数据库, 执行数据库迁移命令

补充:执行数据库迁移命令后 所有的auth模块功能 全部都基于你创建的表 而不再使用auth_user

 

posted @ 2019-09-25 22:25  waller  阅读(186)  评论(0编辑  收藏  举报