Django之Auth模块

一、Auth模块的使用

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

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

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

2、创建后台管理员

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

1
/usr/bin/python3  manage.py  createsuperuser

二、Auth模块的认证和登录

1、views

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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、auth.logout(request) 会自动清除session

1
2
3
4
def logout(request):
    # 清除cookie或者session
    auth.logout(request)
    return redirect('/home/')

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

1、html

2、views

request.user.check_password(old_password)  检查老密码

request.user.set_password(new_password) 修改新密码

request.user.save()  保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@login_required
def set_password(request):
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        re_password = request.POST.get('re_password')
 
        # 先验证两次密码是否输入一致
        if new_password == re_password:
            # 验证老密码是否正确
            is_right = request.user.check_password(old_password)
            # is_right:True False
            if is_right:
                # 修改密码
                request.user.set_password(new_password)
                request.user.save()
                return redirect('/login/')
    return render(request, 'set_password.html')

五、Auth模块之注册功能

1、html

2、views

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.contrib.auth.models import User
 
def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
 
        # 入库
        # User.objects.create(username=username, password=password) # 普通用户
        User.objects.create_superuser(username=username, password=password, email='123@qq.com'# 管理员
        # 自动入库到auth_user表
        return redirect('/login/')
    return render(request, 'register.html')

六、扩展默认的auth_user表

1、models.py

在配置文件中加入下面一句话:  AUTH_USER_MODEL = '应用名.类名', AUTH_USER_MODEL = 'app01.UserInfo'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 默认情况下使用的就是auth_user的默认字段
# 扩展我们自己额外需要的字段
 
# 前提是:所有的模型类都继承
from django.contrib.auth.models import AbstractUser
 
# 不要继承了models.Model
扩展之后需要在配置文件中加一句话
 
"""""在扩展表之前数据库不能够迁移,扩展这个表需要在迁移数据库之前做"""""
# 如果你迁移了,还想扩展怎么办?
1. 换库
2. 需要删除很多个应用的migrations文件夹
 
python manage.py migrate myapp --fake
 
"""
    扩展表之后发生的变化:
        1. 原来的auth_user表不存在了,换成你自己新建的表名了
        2. 原来的auth_user表中的字段还都在,然后多了自己扩展的字段
        3. 继承的类要发生改变AbstractUser
        4. 在配置文件中加入下面一句话:
            AUTH_USER_MODEL = 'app01.UserInfo'
            AUTH_USER_MODEL = '应用名.类名'
        5. 扩展之后还是按照原来的auth_user表使用
        6. auth模块中的数据还是你扩展的表
        7. 扩展之前别迁移.
"""

  

 

posted @   凡人半睁眼  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-08-12 netstat与awk

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示