首页 > 其他分享 > 内置User 实现用户管理

内置User 实现用户管理

时间:2023-05-28 20:32:52浏览次数:30  
标签:返回 内置 get request 用户 django filter User

                                                           2023.5.28


                              内置User 实现用户管理_django

                              内置User 实现用户管理_django_02

                              内置User 实现用户管理_django_03


一,创建用户

                              内置User 实现用户管理_表单_04


在django中我们需要在templates的form中加入{%csrf_token%}这串内容,它的作用是当我们get表单页面时,服务器返回页面的同时也会向前端返回一串随机字符,post提交时服务器会验证这串字符来确保用户是在服务端返回的表单页面中提交的数据,防止有人通过例如jquery脚本向某个url不断提交数据,是一种数据提交的验证机制

request.POST是用来接受从前端表单中传过来的数据,比如用户登录过程中传递过来的username、passwrod等字段。返回类型是字典;

在后台进行数据获取时,有两种方法(以username为例):request.POST[‘username’]与request.POST.get(‘username’),那么这两者有什么不同之处呢?

如果传递过来的数值不为空,那么这两种方法都没有错误,可以得到相同的结果。但是如果传递过来的数值为空,那么request.POST[‘username’]则会提示Keyerror错误,而request.POST.get(‘username’)则不会报错,而是返回一个None


                              内置User 实现用户管理_数据库_05


                              内置User 实现用户管理_数据库_06


1.django的objects.get()方法:

django的get是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。

比如我数据库里有一条记录,记录的name的值是"django"的话,我用student = Student.objects.get(name=‘django’),

返回的是一个记录对象,你可以通过student.dict来查看,它返回的是一个字典的形式,{‘key’:valeus},key是字段的名称,而values是值的内容。

而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。、

2.django的 objects.filter()方法:

django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

比如我数据库里有一条记录,记录的name的值是Python的话,我用student = Student.objects.filter(name=‘python’)

它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。

最大区别:

get返回的是一个对象,并不是一个列表,相反filter得到的才是一个列表(一个对象列表)。因此当对象不存在时,get会报错,而filter则不会,返回一个空列表(没有对象)。

所以可以这样认为,get方法只能取到一个对象,而filter方法可以取到多个对象get方法取不到对象的话就会报错,而filter方法则相反,它是返回一个空列表

二,登录用户

                              内置User 实现用户管理_django_07


user.is_active,用来判断用户名密码是否有效。

登录login(user,request):
将通过认证的用户的唯一标识信息(主键id),通过哈希加密写入到当前session会话中,退出登录:正好和登录相反(清理session会话信息)

                              内置User 实现用户管理_数据库_08

                              内置User 实现用户管理_表单_09



三,重置密码

                              内置User 实现用户管理_数据库_10

默认情况下,验证器在重置或修改密码的表单中使用,也可以在createsuperuser和 changepassword命令中使用。验证器不能应用在模型层,比如 User.objects.create_user() 和 create_superuser() ,因为我们假设开发者(非用户)会在模型层与 Django 进行交互,也因为模型验证不会在创建模型时自动运行

                              内置User 实现用户管理_django_11





四,加密密码

                              内置User 实现用户管理_数据库_12


make_password(password, salt=None, hasher='default')

通过此应用的格式创建一个哈希密码。它需要一个必需的参数:纯文本密码(字符串或字节)。或者,如果你不想使用默认配置( PASSWORD_HASHERS 配置的首个条目 ),那么可以提供 salt 和 使用的哈希算法。有关每个哈希的算法名,可查看 已包含的哈希。如果密码参数是 None ,将返回一个不可用的密码(永远不会被 check_password()通过的密码)。

五,退出登录

                              内置User 实现用户管理_django_13


登出logout()方法:

1.Django用户认证系统提供了logout()方法

2.封装了清理session的操作,帮助我们快速实现登出一个用户

3.logout(request)位置:django.contrib.auth.init.py文件中

4.logout(request)接受一个request参数,从request获取cookie中的名为sessionid的值,通过哈希解密为用户的唯一标识信息(主键id),然后通过id查询数据库中是否有该用户,然后删除redis或者数据库表中的session会话信息,并且删除cookie中sessionid这一项(通过方法request.session.flush())


标签:返回,内置,get,request,用户,django,filter,User
From: https://blog.51cto.com/576642026/6366359

相关文章

  • Ubuntu20.04使终端用户名颜色高亮
    Ubuntu20.04使终端用户名颜色高亮问题背景你还在为你的Linux大量输出内容但是不能清晰的看到每次输入的命令而烦恼吗?找找下面图中的两条命令在哪......
  • mybatis plus 校验用户名是否重复
    添加//判断登录名的唯一性QueryWrapper<User>query=newQueryWrapper<>();query.lambda().eq(User::getLoginName,user.getLoginName());Userone=userService.getOne(query);if(one!=null&&one.getUserId()!=user.getUserId()){returnResult......
  • 系统设计:从零用户扩展到百万用户
    设计一个支持百万用户的系统是具有挑战性的,这是一段需要不断改进和不断提升的旅程。在本章中,我们将构建一个支持单个用户的系统,并逐渐扩展以服务于数百万用户。阅读本章后,您将掌握一些技巧,帮助您解决系统设计面试问题。AI不会取代你,使用AI的人会。欢迎关注我的公众号:更AI。以程......
  • python内置库--secrets
    1关于secretssecrets模块用于生成高度加密的随机数,安全性比较高,应用方面有生成安全的随机数、生成密码字符串等python官方也推荐最好用secrets替代random模块,random模块生成的是一种伪随机数,基于系统时钟和其它可预测原理生成,不是真正随机和安全的2相关函数和类class......
  • 基于移动网络通讯行为的风险用户识别
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]大赛地址:基于移动网络通讯行为的风险用户识别,该比赛是联通大数据公司发起的,同时作为我们的实训的比赛。下面是自己参加比赛过程的报告:第一次参加这种比赛,发现自己经验明显不足。初赛0.787(52/624),复赛0.784(71/624),虽然成绩很差,但是感觉......
  • 用户故事和敏捷方法读后感
    用户故事和敏捷方法读后感简要介绍我阅读了一些关于用户故事和敏捷方法的文章,了解了它们的定义,特点,优势和应用场景。用户故事是一种用简单语言描述软件功能的方式,它从用户的角度出发,强调软件要为用户带来什么价值。用户故事通常遵循一个模板:作为一个<角色>,我想要<行为>,以便<目的......
  • 《用户故事与敏捷方法》阅读笔记2
    第八章讲述了用户故事的分解。当一个大的用户故事过于复杂或难以实现时,需要将其分解为较小的任务或子用户故事。这样可以使开发工作更加可管理和可控,同时也有助于更好地理解用户需求。第九章介绍了团队与客户之间的沟通。开发团队需要密切与客户沟通,以确保开发过程中的用户故事与......
  • python内置库--hashlib
    1关于hashlib与hash算法python的hashlib提供了对hash算法的的支持,常见的算法有MD5SHA1SHA224等,对不同的算法,hashlib提供了一些通用的函数,以方便我们的使用hash算法个人理解是,它可以将任意长度的二进制值变为固定长度的二进制值。通常,这个固定长度的二进制值叫做hash值,也叫......
  • 如何使用ChoiceBox以接收用户的单项选择
    如何使用ChoiceBox以接收用户的单项选择ChoiceBox是一种下拉框,点击后显示可选列表,从中可以再点击选择一个选项。ChoiceBox可以用于接收用户的单项选择。效果展示示例代码importjavafx.application.Application;importjavafx.geometry.Insets;importjavafx.scene.Sce......
  • HANA SQL:ALTER USER
    ALTERUSER语法:ALTERUSER<USER_NAME><ALTER_USER_OPTION>描述:ALTERUSER语句用于修改数据库用户。<USER_NAME>必须制定一个现有的数据库用户。每个用户可以为自己执行ALTERUSER。但并非所有<ALTER_USER_OPTION>可以由用户自己制定。对于<ALTER_USER_OPTION>其他用户,只有拥......