Django框架之 auth认证模块

目录

  • 一、Auth模块是什么
  • 二、Auth模块的使用
    • 2.1 User对象的属性
  • 三、扩展auth_user表的字段
    • 3.1 通过AbstractUser类来进行扩展
    • 再次注意:

一、Auth模块是什么

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

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

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

用auth模块 你就用全套 不是自己写一部分 用别人一部分

二、Auth模块的使用

  • 创建超级用户 用于登录django admin的后台管理
# 必须先有数据库,配置完数据库,执行数据库迁移命令之后
# 再通过 Pycharm中的Tools-> Run manage.py Task

数据命令: createsuperuser
# 然后输入账号、邮箱、密码(注意:密码必须数字加字母并且超过8位)、确认密码、
  • auth模块导入
from django.contrib import auth
  • 校验用户是否存在
'''通过auth模块校验用户是否存在'''
# 返回的是数据对象  没有返回None
user_obj = auth.authenticate(username=username,password=password)
  • 保存用户登录状态

    该函数接受一个HttpRequest对象,以及一个经过认证的User对象。

    该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。

'''通过auth模块记录用户状态 才算真正的用户登录
该方法会帮你操作session表 并且只要执行了该方法
就可以在任何位置通过request.user获取到当前登录的用户对象
'''
auth.login(request, user_obj)
  • 获取当前用户数据对象
'''登陆成功后'''
print(request.user)  # 通过request.user直接拿到登录用户的用户对象
print(request.user.username)    # 通过操作orm的方式 对象.字段名
print(request.user.password)    # 通过操作orm的方式 对象.字段名
  • 判断当前用户是否登录
'''登陆成功后'''
print(request.user.is_authenticated())  # 简单快捷的判断用户是否登录
  • 登出,并清除session信息

    该函数接受一个HttpRequest对象,无返回值。

    当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

'''登陆成功后'''
auth.logout(request)    # 登出并清除用户session信息
  • 校验用户是否登录的装饰器

    auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。

    没有登陆则去指定url登陆,登陆成功后重定向之前想要访问的url

    但是使用时必须指定登陆后重定向的地址,否则django默认去 /accounts/login/ 登陆

'''校验用户登陆装饰器 两种用法'''
from django.contrib.auth.decorators import login_required

# 第一种用法
@login_required(login_url="/app01/auth_login/")  # 局部配置,去指定路径登陆
# 第二种用法
#@login_required  # 全局配置,再settings中配置,否则默认去/accounts/login/中登陆
def auth_home(request):
    '''登陆成功后'''
    print(request.user)  # 直接拿到登录用户的用户对象
    print(request.user.password)
    print(request.user.is_authenticated())  # 简单快捷的判断用户是否登录
    return HttpResponse(f"登陆成功 {request.user.username}")
'''auth登录的装饰器 settings.py 配置内容'''
LOGIN_URL = '/login/'
  • 校验原密码是否正确

    auth 提供的一个检查密码是否正确的方法,需要提供当前请求用户的密码。

    密码正确返回True,否则返回False。

'''校验密码是否正确'''
is_right = request.user.check_password(old_pwd)
  • 设置新密码

    要先登陆不然无法设置

    auth 提供的一个修改密码的方法,接收 要设置的新密码 作为参数。

    注意:设置完一定要调用用户对象的save方法!!!

'''修改密码'''
request.user.set_password(new_pwd)
request.user.save()  # 一定要点save方法保存 才能真正的操作数据库
  • 创建普通用户

    auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。

    注意:这里不能再用 orm的 create 方法去创建用户名记录了,因为这个方法创建的是明文

# 导入认证模型表的User
from django.contrib.auth.models import User

'''创建普通用户 密码是密文 邮箱字段选填'''
User.objects.create_user(username=user, password=pwd)
  • 创建超级用户(管理员)

    只有管理员用户,才能登入django的admin后台

    auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password、email)。

'''创建超级用户  邮箱字段必须填写'''
User.objects.create_superuser(username=user,password=pwd,email='[email protected]')

2.1 User对象的属性

User对象属性:username, password

is_staff : 用户是否拥有网站的管理权限.

is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。

三、扩展auth_user表的字段

我们知道auth_user表是在执行数据库迁移命令时自动创建的

django中间件帮我们在请求来的时候通过auth_user表进行用户身份校验

那问题来了,我们如何改auth_user表呢?增加或删除字段?

3.1 通过AbstractUser类来进行扩展

  1. 首先导入auth认证组件中的AbstractUser类
    from django.contrib.auth.models import AbstractUser
  2. 自己写一个类 继承原来的auth_user类

    注意:你继承了AbstractUser之后 你自定义的表中 字段不能跟原有的冲突

'''扩展 auth认证组件中 auth_user表'''
from django.contrib.auth.models import AbstractUser
class My_User(AbstractUser):
"""
强调 你继承了AbstractUser之后 你自定义的表中 字段不能跟原有的冲突
"""
phone = models.BigIntegerField()
avatar = models.FileField()
register_time = models.DateField(auto_now_add=Tr
  1. 在settings配置文件中 告诉django使用你新建的类来替代auth_user表

    固定语法: AUTH_USER_MODEL = ‘应用名.表名‘

    坑点:不能在以有库上直接在迁移一次数据库。只能用新的数据库,并且没有数据库迁移记录。

'''settings.py'''

# auth自定义表配置
AUTH_USER_MODEL = 'app01.My_User'
# 固定语法: AUTH_USER_MODEL = '应用名.表名

通过上面的方式 继承的表 还可以继续使用auth模块所有的功能

再次注意:

一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

原文地址:https://www.cnblogs.com/XuChengNotes/p/11773818.html

时间: 2024-08-30 01:51:27

Django框架之 auth认证模块的相关文章

Python Django 生命周期 中间键 csrf跨站请求伪造 auth认证模块 settings功能插拔式源码

一 django 生命周期 二 django中间键 1.什么是中间键 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出.每个中间件组件都负责做一些特定的功能. 简单来说就相当于django门户,保安:它本质上就是一个自定义类,类中定义了几个方法. 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models): 响应走的时候也需要经过中间件才能到达w

Django之中间件及Auth认证模块

CBV加装饰器 # 写一个装饰器验证session def login_auth(func): def inner(request,*args,**kwargs): if request.session.get('is_login'): return func(request,*args,**kwargs) else: return redirect('/login/') return inner # 写一个类作为网站主页,必须登陆才能访问 # 给里面的get,post方法加装饰器 class

Django框架进阶7 django请求生命周期流程图, django中间件, csrf跨站请求伪造, auth认证模块

django请求生命周期流程图 djang中间件 它是django的门户 只要是全局相关的功能你都应该考虑使用django中间件来帮你完成 全局用户身份校验 全局用户访问频率校验 用户访问黑名单 用户访问白名单 # 只要以后用django开发业务 设计到全局相关的功能 你就考虑用中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Sessio

django框架之auth模块

内容回顾    1. form表单组件        1. 常用字段            1. CharField()            2. ChoiceField()        2. 参数或配置            1. label="label标签显示的文本内容"            2. initial="默认值"            3. widget=forms.widgets.TextInput()   --> <input

Django Auth认证模块

Author模块介绍 Django作为一个完美主义者的终极框架,它内置了强大的用户认证系统--auth,执行数据库迁移的那两条命令时,即使我们没有建表,它默认帮我们创建auth_user 表来存储用户数据. 创建超级用户,我们可以在pycharm中使用导航栏中的Tools里的run manage.py Task 中输入createsuperuser 注册相关: create_user() auth 提供的一个创建新用户的方法,需要提供必要参数(username.password)等. 用法: f

auth认证模块

Django 自带的用户验证: 可以实现用户注册.用户登录.用户认证.注销.修改密码等功能: auth模块: from django.contrib import auth auth中的方法: 1).authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username .password两个关键字参数. 如果认证成功(用户名和密码正确有效),便会返回一个 User 对象. authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用

20 Auth认证模块

目录 一.Auth模块是什么 二.auth模块创建超级用户 三.Auth 自定义登录页面 登录超级用户 四.auth模块 常用方法 4.1 如何创建超级用户 4.2 如何使用普通的登录页面校验用户存不存在 4.3 auth 保存用户登录状态 4.4 auth 的request.user 4.5 局部配置/全局配置 装饰器 4.6 利用装饰器实现用户密码修改 4.7 auth 如何注册新的用户 五.扩展 auth_user 表的字段 一.Auth模块是什么 Auth模块是Django自带的用户认证

Django--csrf跨站请求伪造、Auth认证模块

form表单中使用跨站请求伪造 { % csrf_token % } 会动态生成一个input框,内部的value是随机刷新的 如果不想校验csrf from django.views.decorators.csrf import csrf_exempt, csrf_protect 然后在不想装饰的函数的上面加上@csrf_exempt 如果只想校验单独一个的话就在那个函数的上面加上@csrf_protect 在CBV中添加csrf就是通过导入第三方模块 from django.utils.de

第三百零四节,Django框架,urls.py模块——

Django框架,模块 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个url地址时,通过这个路由映射模块,映射给对应的逻辑处理函数 urlpatterns等于的一个列表,列表里的一个元素就是一条路由映射 urlpatterns路由映射配置方式 参数说明: 一个正则表达式字符串一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串可选的要传递给视图函数的默认参数(字典形式)一个可选的name参数 urlpatterns = [ url(正则表达式, 映射函数,参数[