Django之auth认证模块

1.   什么是auth模块

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

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

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

2.  生成auth物理表

    1.  配置setting.py使用mysql存储数据

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'yangjianbo',  #数据库需要提前建好
    'USER': 'root',
    'PASSWORD': '123.com',
    'HOST': '172.16.1.209',
    'PORT': '3306',
    }
}

    2.  Django使用pymysql模块连接mysql数据库

    3.  在与settings.py同级目录下的__init__.py中引入模块,进行配置

import pymysql
pymysql.install_as_MySQLdb()

    4.  执行数据迁移

        py manage.py migrate  

    5.  执行命令以后,会在mysql数据库中,多出几个表      

        

3.  创建django-admin账户

    1.  创建超级管理员

        不能在表中直接创建,由于密码是需要加密的,而表中创建则不会通过auth模块加密,在使用的时候,密码比对会发生错误

        python manage.py createsuperuser                       

        

    2.  数据库中的信息        

        

        可以看到password这个字段会被自动加密

4.  登录使用admin账户

    1.  注意事项:

        1.  普通用户注册只能通过逻辑来编写

        2.  不能自己创建,因为密码加密无法实现

        3.  可以通过web页面登录管理员账户,添加普通用户

    2.  普通用户注册逻辑

        1.  不能通过user.objects.create()来实现,创建的用户密码在数据库中显示为明文

        2.  通过create_user方法来实现

5.  auth模块的方法

    1.  导入auth模块以及导入User表

# 导入auth模块
from django.contrib import auth
# 导入auth-user表
from django.contrib.auth.models import User

    2.  auth.authenticate校验用户是否已经存在      

        通过authenticate方法

          校验用户成功后,返回的是一个封装好的用户对象

          校验错误则返回None

          

    3.  auth.login    

        用户登录成功之后,返回给客户端登录的凭证或者说是令牌、随机字符串,则不需要我们去操作diango_session表,会自动创建session

def login_func(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 1。通过auth模块来校验加密后的密码
        user_obj = auth.authenticate(request, username=username, password=password)
        if user_obj:
            # 2.用户登录成功之后(返回给客户端登录的凭证或者说是令牌、随机字符串)
            auth.login(request, user_obj)  # 自动操作django_session表
    return render(request, 'loginPage.html')

    4.  request.user

        1.  request.user  直接获取当前登录的用户对象数据

        2.  request.user.is_authenticated  判断当前对象,是否已登录

        3.  request.user.check_password(原密码)  校验原密码是否正确

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

        5.  request.user.save()  保存修改  

     5.  auth.logout(request)  

        退出登录的本质就是删除session表中相关的数据

        

  

                          

 

 

        

    

 

    

 

 

                      

 

posted @ 2024-05-13 11:32  奋斗史  阅读(32)  评论(0)    收藏  举报