Django学习笔记-默认的用户认证系统(auth)

这篇具有很好参考价值的文章主要介绍了Django学习笔记-默认的用户认证系统(auth)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Django默认的用户认证系统

Django 自带一个用户验证系统。它负责处理用户账号、组、权限和基于cookie的用户会话。

Django 验证系统处理验证和授权。简单来说,验证检验用户是否是他们的用户,授权决定已验证用户能做什么。这里的术语验证用于指代这两个任务。

认证系统由以下部分组成:

  • 用户
  • 权限:二进制(是/否)标识指定用户是否可以执行特定任务。
  • 组:将标签和权限应用于多个用户的一般方法。
  • 可配置的密码哈希化系统
  • 为登录用户或限制内容提供表单和视图工具
  • 可插拔的后端系统

Django 里的验证系统旨在通用化,不提供一些常见的 web 验证系统的特性。其中一些常见问题的解决方案已在第三方包中实现。

  • 密码强度检查
  • 限制登录尝试
  • 针对第三方的身份验证(例如OAuth)
  • 对象级权限

二、用户管理(User)

Django的用户管理通过User模型类处理。

2.1 User模型的字段

username:必要的。150 个字符或以下。用户名可包含字母数字、_@+. 和 - 字符。

first_name:可空字段。150 个字符或更少。

last_name:可空字段。150 个字符或更少。

email:可空字段。电子邮件地址。

password:必填字段。一个密码的哈希值和元数据。(Django 不存储原始密码。)原始密码可以任意长,可以包含任何字符。

groups多对多关系到 Group

user_permissions:多对多关系到 Permission

is_staff:布尔型。指定该用户是否可以访问管理站点。

is_active布尔值。指定该用户账户是否应该被视为活跃账户。我们建议你把这个标志设置为 False,而不是删除账户;这样,如果你的应用程序对用户有任何外键,外键就不会被破坏。

is_superuser:布尔值。指定该用户拥有所有权限,而不用一个个开启权限。

last_login用户最后一次登录的日期时间。

date_joined:指定账户创建时间的日期时间。帐户创建时,默认设置为当前日期/时间。

2.2 User模型的属性

is_authenticated:只读属性,始终返回 True (匿名用 护AnonymousUser.is_authenticated 始终返回 False ),可通过该方法确认用户是否为用户列表中的用户。

is_anonymous:只读属性,总是 False。这是区分 User 和 AnonymousUser 对象的一种方式。一般来说,你应该优先使用 is_authenticated 来代替这个属性。

三、User基本操作

需要引入User模块:

from django.contrib.auth.models import User

3.1 查询所有用户

        # 获取所有用户
            users = User.objects.all()
            
            response.append(f"All User : {users.count()}")
            for user in users:
                response.append(f"-- {user.get_username()}")

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

  

3.2 添加新用户

            user1 = User.objects.create_user(username="User3",password="123456")
            user1.save()
            response.append(f"New User : {user1.get_username()}")
            user2 = User.objects.create_user(username="User4",password="123456")
            response.append(f"New User : {user2.get_username()}")

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

3.3 修改用户信息

            user = User.objects.get(username = "User1")
            response.append(f"Old UserName : {user.get_username()}")
            user.username = "New User"
            user.save()
            user = User.objects.get(username = "New User")
            response.append(f"New UserName : {user.get_username()}")

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

 3.4 修改密码

            user = User.objects.get(username = "User3")
            response.append(f"Old Password : {user.password}")
            user.set_password("888888")
            user.save()
            user = User.objects.get(username = "User3")
            response.append(f"New Password : {user.password}")

3.5 用户验证

使用 authenticate() 来验证用户,使用时需要引入函数。它使用 username 和 password 作为参数来验证,对每个身份验证后端( authentication backend ` )进行检查。如果后端验证有效,则返回一个 :class:`~django.contrib.auth.models.User 对象。如果后端引发 PermissionDenied 错误,将返回 None

from django.contrib.auth import authenticate

user = authenticate(username= "New User", password = "123456")
if user is not None:
    response.append(f"User is exist : {user.get_username()}")
else:
    response.append(f"User is not exist.")

 Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

四、权限管理

4.1 创建权限

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from serverapp.models import Person

def CreatePermission(request:HttpRequest, new_permission:str):
    """Create perssion"""

    content_type = ContentType.objects.get_for_model(Person)
    permission, result = Permission.objects.get_or_create(
        codename = new_permission,
        name = f"Can {new_permission}",
        content_type = content_type,
    )

    return HttpResponse("{0}".format(permission))

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

权限可以在权限表中查看到:

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

4.2 用户权限管理

 使用User对象的groups 和 user_permissions进行权限设置。

myuser.groups.set([group_list])
myuser.groups.add(group, group, ...)
myuser.groups.remove(group, group, ...)
myuser.groups.clear()
myuser.user_permissions.set([permission_list])
myuser.user_permissions.add(permission, permission, ...)
myuser.user_permissions.remove(permission, permission, ...)
myuser.user_permissions.clear()

 4.3 用户登录

from django.contrib.auth import login

def login_user(request:HttpRequest,pk:int):
    """Create perssion"""

    login_user = User.objects.get(pk=pk)
    login(request, login_user)
    return HttpResponse("The user {0} login.".format(login_user.get_username()))

 Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

4.4 用户登出 

from django.contrib.auth import logout

def logout_user(request:HttpRequest):
    """Create perssion"""

    logout(request)

    return HttpResponse("The user {0} logout.".format(request.user.get_username()))

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

 4.5 限制未登录用户的访问

 4.5.1 检查request.user.is_authenticated 状态

def login_confirm_raw(request:HttpRequest):
    """Create perssion"""

    if not request.user.is_authenticated:
        return HttpResponse("The user {0} doesn't login.".format(request.user.get_username()))
    else:
        return HttpResponse("The user {0} has login.".format(request.user.get_username()))

未登录时:

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

登陆用户:

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

重新确认用户是否登录:

 Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

 文章来源地址https://www.toymoban.com/news/detail-625264.html

4.5.2 使用login_required 装饰器

from django.contrib.auth.decorators import login_required    


@login_required
def login_confirm(request:HttpRequest):
    """Create perssion"""

    if not request.user.is_authenticated:
        return HttpResponse("The user {0} doesn't login.".format(request.user.get_username()))
    else:
        return HttpResponse("The user {0} has login.".format(request.user.get_username()))

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

 4.6 限制已登录的用户

除了直接对用户信息进行判定外,亦可以使用user_passes_test 装饰器进行判定。

from django.contrib.auth.decorators import user_passes_test

def username_check(user:User):
    """Check username"""

    return user.username.startswith("User")

@user_passes_test(username_check)
def check(request:HttpRequest):
    """check user"""

    return HttpResponse("The username {0} is right.".format(request.user.get_username()))

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

user_passes_test() 接受一个必要的参数:一个带有:class:~django.contrib.auth.models.User 对象的调用,如果允许用户访问这个页面,则返回 True 。注意,user_passes_test() 不会自动检查用户是否匿名。

user_passes_test() 可以传递两个可选参数:

login_url

允许你指定用户没有通过测试时跳转的地址。它可能是一个登录页面,如果你没指定,默认是 settings.LOGIN_URL 。

redirect_field_name

与 login_required() 相同。如果你想把没通过检查的用户重定向到没有 "next page" 的非登录页面时,把它设置为 None ,这样它会在 URL 中移除。

 4.7 权限访问装饰器(permission_required)

使用permission_required装饰器,可以快捷的确认用户是否有特定的权限。

from django.contrib.auth.decorators import permission_required

@permission_required("""serverapp.add_person""")
def check_permission(request:HttpRequest):
    """Check user permission"""

    return HttpResponse("The user {0} has permission.".format(request.user.get_username()))

有权限时:

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

 无权限时:

Django学习笔记-默认的用户认证系统(auth),# Django,django,学习,笔记

 

到了这里,关于Django学习笔记-默认的用户认证系统(auth)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Django用户认证】通过阿里云如何实现实名认证

    我最近在我的项目上有实名认证的需求,主要实现人名和身份证号码的验证,针对这一块具体怎么做的文章比较少,我解决问题之后,觉得还是把这些坑都写清楚,方便初学者。 网络并非法外之地。然而,却存在部分网络用户利用虚拟的网络空间,实施网络暴力、造谣诽谤、

    2024年02月06日
    浏览(60)
  • django authenticate--用户身份认证

    authenticate Django的contrib.auth模块中的authenticate()函数用于对用户的凭据进行身份验证,与已配置的身份验证后端进行比较。 当用户尝试登录时,authenticate()函数将使用用户的凭据(即用户名和密码)作为参数进行调用,该函数然后检查可用的身份验证后端以验证凭据,这些后端在

    2024年02月05日
    浏览(59)
  • Django实战项目-学习任务系统-用户注册

    接着上期代码框架,开发第2个功能,用户注册,在原有用户模型基础上,增加一个学生用户属性表,用来关联学生用户的各种属性值,这个属性表是参考网络小说里系统属性值设计的,方便直观了解用户的能力高低,等级以及积分值等信息。 第一步:编写第二个功能-用户注

    2024年02月07日
    浏览(43)
  • Django实现用户注册登录,表单提交后跳转网页(学习笔记)

    效果图如下:   使用命令提示符,进入想存放项目的目录: 在项目coco目录下新建static文件夹,用于存放网页文件的css,js,imgs 在coco_app目录下新建文件夹templates,用于存放需要用到的HTML网页 打开coco文件夹中的settings.py注册coco_app 引用templates 连接数据库,这里我用的MySQL数据

    2023年04月11日
    浏览(82)
  • Python web实战之Django用户认证详解

    Python Web 开发、Django、用户认证、实战案例   今天来探讨一下 Django 的用户认证吧!在这篇文章中,我将为大家带来一些有关 Django 用户认证的最佳实践。   在开发 Web 应用程序时,用户认证是一个最常用的功能。它能够确保用户的安全性和隐私,并且为应用程序提供了个性化

    2024年02月14日
    浏览(53)
  • Django学习笔记-实现聊天系统

    笔记内容转载自 AcWing 的 Django 框架课讲义,课程链接:AcWing Django 框架课。 聊天系统整体可以分为两部分:输入框与历史记录。 我们需要先修改一下之前代码中的一个小 BUG,当在一个窗口中按 Q 时,另一个窗口中点击鼠标左键也能攻击,因为按下按键的事件被所有窗口都捕

    2024年02月07日
    浏览(41)
  • Django 不到20行代码实现用户认证及权限管理完整功能

    几乎所有软件项目都不得不实现的1个功能需求就是: 用户认证与权限管理 。其基本要求包括: 提供用户登入,登出,密码更改,密码重置等页面。 对页面操作、数据访问的权限控制,包括增删改查。 权限控制基于用户、组、基于页面、基于表。 说起来容易,实现起来却非

    2023年04月27日
    浏览(44)
  • Django使用DRF + Simple JWT 完成小程序使用自定义用户的注册、登录和认证

    在已经配置好djangorestframework-simplejwt的前提下进行 小程序用户模型类 这里的模型类并未继承django自带的用户模型类,好处是后面小程序用户也是没法进行admin端的,缺点是可能会对django自带的权限管理有影响,如果只有小程序端的用户的话没问题,但是如果还有其它用户的话

    2024年02月10日
    浏览(49)
  • django报错设置auth User

    1.报错:auth.User.groups... auth.User.user_permissions...  我们的用户组、用户权限只能关联一个用户 , 我们自己定义了一个用户表,系统还有一个用户表,这时候就会出问题。 解决办法: 让给我们自己定义的user替换系统的就可以了。 settings.py里面加上: 可能会报错:ValueError: Inv

    2024年02月16日
    浏览(42)
  • Django——Auth模块以及admin站点

    Auth 用户认证,本质上也是设置 Session。 在 django 迁移数据库的是时候会自动生成一个用户认证表:auth_user , 存放用户基本信息(用户名 , 密码,邮箱……) 重新配置 auth 认证模型类 实现验证登录,以及退出登录 django 提供的网站后台数据管理 创建管理员用户 注册的时候,

    2024年04月29日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包