Django之Auth模块

发布时间 2023-08-12 14:56:11作者: 凡人半睁眼

一、Auth模块的使用

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

开发一个网站无可避免的需要设计实现网站的用户系统。需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。

Django内置了强大的用户认证系统–auth,它默认使用 auth_user 表来存储用户数据。

2、创建后台管理员

前提是迁移过数据库,有auth_user 表。注意python得版本

/usr/bin/python3  manage.py  createsuperuser

二、Auth模块的认证和登录

1、views

auth.authenticate  验证用户名和密码 和  auth.login 自动登录保存会话状态

def login(request):
    if request.method == 'POST':
        # 接收前端传过来的数据
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 第二步验证用户名和面是否正确
        # 1. 我们去哪个表中查询数据 2. 使用这张表中的哪个字段来比较
        # 验证用户名和密码
        user_obj = auth.authenticate(request, username=username, password=password)
        print(user_obj)  # None
        print(user_obj)  # root 管理员登录成功之后的用户对象
        """
            注意事项:传递参数的时候,用户名和密码必须同时传入
        """
        #########################要么全部使用auth模块的方法,要么全部自己写,,一定别混合使用
        if user_obj:  # 验证成功,执行下面的代码
            auth.login(request, user_obj) 
            ### 只要写了auth.login,那么就可以在全局任何有request对象第地方通过request.user拿到用户的对象
            return redirect('/admin/')
    return render(request, 'login.html')

auth.login() 会自动登录保存session状态

浏览器查看session

数据库查看session

2、login_required装饰器和 request.user.is_authenticated 方法

from django.contrib.auth.decorators import login_required

# # http://127.0.0.1:8000/accounts/login/?next=/order/
# # @login_required # :http://127.0.0.1:8000/accounts/login/?next=/order/
# '''
#     当局部和全局(setting.py中)都存在的时候,按局部的
#     如果局部没有,按照全局的
# '''
@login_required(login_url='/login/')  # 没有登录的话跳转到指定的页面
def order(request):
    # 验证用户是否已经登录
    print(request.user.is_authenticated)  # True  False
    # if request.user.is_authenticated:
    #     # 处理登陆之后的逻辑
    #     pass
    # else:
    #     pass
    # 没有登录,跳转登录页面
    return HttpResponse("order")

使用装饰器login_required,如果没有登录,跳转到登录页面

删除session,访问order页面失败,说明auth.login自动处理了session。 

三、Auth模块之退出系统

1、

 

 

2、

 

四、Auth模块之修改密码功能

1、

2、

3、

 

五、Auth模块之注册功能

1、

2、

3、

六、扩展默认的auth_user表

1、

2、

3、