Django auth模块

【一】命令行创建用户

【1】语法

python manage.py createsuper

【2】示例

  • 用户名
    • 默认是是电脑名称
  • 邮箱
    • 可以填也可以不填
  • 密码
    • terminal中:输入密码不显示出来
    • manage.py中:明文输入
    • 输入密码太简单会提示
Username (leave blank to use 'administration'): admin
Email address: 123@qq.com
Password: 
Password (again): 
This password is too short. It must contain at least 8 characters.
This password is too common.
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

【3】保存的数据

  • 默认数据保存在数据库

    • auth_user
  • 所以需要提前执行迁移数据库命令

  • 数据内容

    • id: 用户的唯一标识符,是一个自动增长的整数。
    • password: 用户的哈希密码。Django会自动地为密码加密,所以这个字段存储的是加密后的密码,而不是明文密码。
    • last_login: 用户最后一次登录的时间。
    • is_superuser: 一个布尔值,表示用户是否是超级用户。超级用户可以访问和管理所有的内容,包括由Django的admin应用提供的管理界面。
    • username: 用户的用户名。这是用户的主要标识,用于登录等操作。
    • first_name and last_name: 用户的名和姓。
    • email: 用户的电子邮件地址。
    • is_staff: 一个布尔值,表示用户是否是工作人员。工作人员可以访问由Django的admin应用提供的管理界面。
    • is_active: 一个布尔值,表示用户的账号是否是活跃的。你可以通过设置这个字段来禁用一个用户的账号。
    • date_joined: 用户加入(即,用户的账号被创建)的日期和时间。

【二】admin登录

【1】登录

  • 项目启动

    • 就可以输入admin路由进入
  • 登录成功页面

    • 包括用户 (User) 和组 (Group)

在这里插入图片描述

【2】功能

  • 用户管理

    • 在用户管理界面,可以查看、创建、修改和删除用户。
    • 可以查看用户的详细信息,如用户名、电子邮件、是否是工作人员、是否是超级用户等。
    • 可以修改这些信息,或者创建新的用户。
    • 此外,还可以为用户设置密码,或者删除用户。
  • 组管理

    • 在组管理界面,可以查看、创建、修改和删除组。

    • 可以查看一个组的成员,或者将用户添加到组中,或者从组中移除用户。

    • 还可以为组分配权限。这些权限决定了组的成员可以访问和修改哪些资源。

    • 组是一种方便的方式来管理一组有相同权限的用户

      • 比如:可以创建一个 “编辑” 组,为它分配修改文章的权限,然后将所有的编辑添加到这个组。
      • 这样就可以通过管理组来管理编辑的权限,而不是为每个编辑单独设置权限。
  • 权限管理

    • 在用户和组的管理界面,可以为用户和组分配权限。
    • 权限通常与你的模型相关。
      • 比如,对于一个文章 (Article) 模型,可能有 “添加文章”、“修改文章” 和 “删除文章” 等权限。
      • 可以为用户或组分配这些权限,以控制他们可以访问和修改哪些资源。

【三】登录、验证、跳转

【1】方法

(1)导入模块

from django.contrib import auth

(2)authenticate函数

  • auth.authenticate(request, username, password)
    • 验证提供的用户名和密码是否匹配
    • 如果匹配,它将返回一个 User 对象
    • 如果不匹配,它将返回 None

(3)login函数

  • auth.login(request, user_obj)
    • 用于在当前的会话中登录用户
    • 用户的 ID 将被保存在会话中
    • 所以在后续的请求中,可以使用 request.user 来获取当前的用户

(4)is_authenticated属性

  • request.user

    • 没有登录是AnonymousUser,匿名用户,是个对象
    • 登录成功是用户名,但是任然是个对象
  • request.user.is_authenticated

    • 用于判断用户是否已经登录。
    • 如果用户已经登录,它将返回 True
    • 否则,它将返回 False

(5)login_required装饰器

  • @login_required(login_url)

    • 用于确保视图函数只能被已经登录的用户访问

    • 如果用户没有登录,它将重定向登录页面

    • 登录成功将返回原始界面

  • 跳转-局部配置

    • 指定login_url=‘/login/‘
  • 跳转-全局配置

    • settings文件夹中添加
    • LOGIN_URL = '/login/'
    • 装饰器将不必代括号
  • 优先级

    • 局部优先级大于全局优先级

【2】示例

  • 登录
from django.contrib import auth
def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")

        # 验证用户名和密码,验证失败是None
        user_obj = auth.authenticate(request, username=username, password=password)
        if user_obj:
            # 验证通过,登录用户,将user_obj保存到request中
            auth.login(request, user_obj)
            # 跳转会原来的界面
            next_url = request.GET.get("next", "/home/")
            return redirect(next_url)

    return render(request, 'login.html', locals())
  • 检查登录
def check(request):
    print(request.user, type(request.user))
    # AnonymousUser <class 'django.utils.functional.SimpleLazyObject'>
    # admin <class 'django.utils.functional.SimpleLazyObject'>
    print(request.user.is_authenticated)
    return HttpResponse()
  • 自动跳转和跳回
from django.contrib.auth.decorators import login_required
@login_required
def func2(request):
    return HttpResponse("func2")
# http://127.0.0.1:8000/login/?next=/func1/

【四】创建、修改、退出

【1】语法

(1)创建

  • 导入
from django.contrib.auth.models import User
  • User.objects.create()

    • 创建普通用户,密码明文
  • User.objects.create_user()

    • 创建普通用户,密码自动加密
  • User.objects.create_superuser()

    • 创建管理员用户,密码自动加密

(2)密码

  • 导入
from django.contrib.auth.hashers import make_password, check_password
  • is_right = request.user.check_password(old_password)

    • 判断原始密码是否正确
    • 这里的old_password是未加密的原始密码
  • request.user.set_password(new_password)

    • 设置新的密码
    • 这里的new_password是未加密的新密码
    • 最后需要save()方法
  • make_password(password)

    • 密码加密

(3)退出

  • auth.logout(request)
    • 用户退出
    • 这个函数会清除当前 session 中的所有信息
    • 包括已登录的用户的信息。

【2】示例

  • 注册
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
def register(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        confirm_password = request.POST.get('confirm_password')
        # 密码加密
        print(make_password(password))
        if confirm_password == password:
            # 创建普通用户,密码是明文
            # User.objects.create(username=username, password=password)
            # 创建普通用户,密码经过加密了
            User.objects.create_user(username=username, password=password)
            # 创建管理员用户
            # User.objects.create_superuser(username=username, password=password)
    return render(request, 'register.html')
  • 修改密码
from django.contrib.auth.decorators import login_required
from django.contrib.auth.hashers import make_password, check_password
@login_required(login_url='/login/')
def revise_password(request):
    user_obj = request.user
    if request.method == "POST":
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        confirm_password = request.POST.get('confirm_password')
        if new_password == confirm_password:
            # 判断原始密码时候正确
            is_right = request.user.check_password(old_password)
            if is_right:
                # 设置新密码
                request.user.set_password(new_password)
                request.user.save()
    return render(request, 'revise_password.html', locals())
<form action="" method="post">
    <p>username:<input type="text" name="username" disabled value="{{ user_obj.username }}"></p>
    <p>old_password:<input type="password" name="old_password"></p>
    <p>new_password:<input type="password" name="new_password"></p>
    <p>confirm_password:<input type="password" name="confirm_password"></p>
    <button class="button">revise</button>
</form>
  • 退出
from django.contrib.auth.decorators import login_required
@login_required
def logout(request):
    username = request.user.username
    auth.logout(request)
    return HttpResponse(f"{username}退出")
# bruce退出

【五】扩展auth_user表

  • auth_user的字段信息就那么多
  • 想要添加需要特殊手段

【1】使用一对一字段扩展

  • 不推荐
from django.db import models
from django.contrib.auth.models import User

class UserInfo(models.Model):
    addr = model.CharField(max_length=255)
    user = models.OneToOneField(to='User', on_delete=models.CASCADE)

【2】子类化 AbstractUser

  • 前提:

    • 不能有auth_info表,最终只有自定义的表
    • 所以这个需要在写项目之前
    • 需要确定方案
  • 注意事项

    • 新表内不要创建已有的字段

    • 需要修改配置文件settings

      • AUTH_USER_MODEL = '应用名.表名'
      • 没有models文件名这层
    • 使用的时候需

      • 一些方法需要适当的修改为自定义表名
from django.db import models
from django.contrib.auth.models import User, AbstractUser

class UserInfo(AbstractUser):
    addr = models.CharField(max_length=255)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/494429.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库----------探索高级SQL查询语句 (二)

目录 一、子查询 1.1多表查询 1.2多层嵌套 1.3 insert语句子查询 1.4update语句子查询 1.5delete语句子查询 1.6EXISTS 1.7子查询&#xff0c;别名as 二、mysql视图 2.1mysql视图介绍 2.2mysql作用场景[图]: 2.3视图功能&#xff1a; 2.4视图和表的区别和联系 区别…

Component is not found in path “miniprogram_npm/@vant/

在微信小程序中使用vantUI库时&#xff0c;xxx.json内引入vant组件&#xff0c;报错Component is not found in path "miniprogram_npm/vant/checkbox/index &#xff0c;按报错路径查看&#xff0c;在报错目录下的包&#xff0c;文件完好存在&#xff0c;如下截图 找到n…

Etcd 基本入门

1&#xff1a;什么是 Etcd ? Etcd 是 CoreOS 团队于2013年6月发起的开源项目&#xff0c;它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法&#xff0c;Etcd基于 Go 语言实现。 名字由来&#xff0c;它源于两个方面&#xff0c;…

20240320-2-线性回归+逻辑回归

线性回归于逻辑回归面试题 1. 简单介绍一下线性回归。 **线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。**这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简…

V R社交平台的用处|虚拟现实体验馆加盟|V R设备在线价格

VR&#xff08;虚拟现实&#xff09;社交平台的用处可以体现在以下几个方面&#xff1a; VR社交平台不仅可以丰富用户的社交体验&#xff0c;还可以在教育、艺术、商务等领域发挥重要作用&#xff0c;为用户提供更加多样化、互动性强的社交平台体验。 VR游乐设备|VR娱乐设备|VR…

SEO 的未来:GPT 和 AI 如何改变关键词研究

谷歌Gemini与百度文心一言&#xff1a;AI训练数据的较量 介绍 想象一下&#xff0c;有一个工具不仅可以理解错综复杂的关键字网络&#xff0c;还可以预测搜索引擎查询的变化趋势。 这就是生成式预训练 Transformer (GPT) 和其他人工智能技术发挥作用的地方&#xff0c;以我们从…

37.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-解码器细化类的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;36.数据解码器的…

高阶SQL语句(二)

一 子查询 也被称作内查询或者嵌套查询&#xff0c;是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句 是先于主查询语句被执行的&#xff0c;其结果作为外层的条件返回给主查询进行下一 步的查询过滤。 ①子语句可以与主语句所查询的表相同&#xff0c;也可以是不…

29---Nor Flash电路设计

视频链接 Nor Flash硬件电路设计01_哔哩哔哩_bilibili NOR FLASH电路设计 1、NOR FLASH介绍 NOR Flash最早是由Intel公司于1988年开发出的。 NOR Flash虽容量小但速度快,最大特点是支持芯片内执行&#xff08;XIP&#xff09;&#xff0c;即程序可以直接在NOR flash的片内…

mac-git上传至github(ssh版本,个人tokens总出错)

第一步 git clone https://github.com/用户名/项目名.git 第二步 cd 项目名 第三步 将本地的文件移动到项目下 第四步 git add . 第五步 git commit -m "添加****文件夹" 第六步 git push origin main 报错&#xff1a; 采用ssh验证 本地文件链接公钥 …

Day23:事务管理、显示评论、添加评论

事务管理 事务的定义 什么是事务 事务是由N步数据库操作序列组成的逻辑执行单元&#xff0c;这系列操作要么全执行&#xff0c;要么全放弃执行。 事务的特性(ACID) 原子性(Atomicity):事务是应用中不可再分的最小执行体&#xff08;事务中部分执行失败就会回滚 。一致性(C…

AWS基础网络产品及协同架构-Networking

简介 一个完整的AWS网络架构图&#xff0c;包含了如下能力&#xff1a; Users (用户): 表示使用AWS服务的用户或系统。 SaaS (软件即服务): 表示在AWS上运行的软件服务&#xff0c;如企业微信可能作为SaaS提供。 example.com?: 这可能是一个示例域名&#xff0c;用于展示如何…

[2021]Zookeeper getAcl命令未授权访问漏洞概述与解决

今天在漏洞扫描的时候蹦出来一个zookeeper的漏洞问题&#xff0c;即使是非zookeeper的节点&#xff0c;或者是非集群内部节点&#xff0c;也可以通过nc扫描2181端口&#xff0c;获取极多的zk信息。关于漏洞的详细描述参考apache zookeeper官方概述&#xff1a;CVE-2018-8012: A…

KPCA-GWO-LSSVM,基于KPCA核主成分分析优化灰狼优化算法GWO结合最小二乘支持向量机LSSVM回归预测

基于KPCA核主成分分析优化灰狼优化算法&#xff08;KPCA-GWO&#xff09;结合最小二乘支持向量机&#xff08;LSSVM&#xff09;回归是一种用于回归分析的混合优化算法。下面我将简要介绍这个方法的步骤&#xff1a; 核主成分分析&#xff08;KPCA&#xff09;&#xff1a; KPC…

小米HyperOS 澎湃os机型免答题 免社区等级 秒接bl锁操作步骤解析

小米机型解锁bl 绕过社区等级5才可以解锁的限制的教程_没有五级社区怎么解锁bl-CSDN博客 上次解析了小米有些出厂不是HyperOS系统的机型绕社区等级接bl锁的操作。目前有更新出厂为HyperOS系统的机型免社区登录等级限制 免答题解锁bl的操作。而且有网友在米14 平板6sp k70这些新…

解决kubesphere流水线docker登陆错误http: server gave HTTP response to HTTPS client

kubesphere DevOps流水线中&#xff0c;在登录私有的harbor仓库时&#xff0c;报以下错误 docker login 111.230.19.120:80 -u admin -p test123. WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get "https://…

Android JNI SO库和对应的CPU架构详解

Android JNI SO库和对应的CPU架构详解 文章目录 Android JNI SO库和对应的CPU架构详解一、前言二、Android CPU架构1、Android系统支持的CPU架构2、如查查看手机的CPU架构&#xff08;1&#xff09;Android13 大屏AML厂商的cpu信息&#xff1a;&#xff08;2&#xff09;电脑An…

前缀和算法(1)

目录 一维前缀和[模板] 一、题目描述 二、思路解析 三、代码 二维前缀和[模板] 一、题目描述 二、思路解析 三、代码 724.寻找数组的中心下标 一、题目描述 二、思路解析 三、代码 238.除自身以外数组的乘积 一、题目描述 二、思路解析 三、代码 一维前缀和[模…

数据结构——二叉搜索树详解

一、二叉搜索树定义 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1.非空左子树上所有节点的值都小于根节点的值。 2.非空右子树上所有节点的值都大于根节点的值。 3.左右子树也都为二叉搜索树。 如下图所示&#xff1a…

上位机图像处理和嵌入式模块部署(qmacvisual区域提取)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在图像处理中&#xff0c;有两部分比较重要&#xff0c;一个是区域分割&#xff0c;一个是区域提取。区域分割&#xff0c;比较好理解&#xff0c;…
最新文章