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")# 验证用户名和密码,验证失败是Noneuser_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.userif 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.usernameauth.logout(request)return HttpResponse(f"{username}退出")
# bruce退出

【五】扩展auth_user表

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

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

  • 不推荐
from django.db import models
from django.contrib.auth.models import Userclass 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, AbstractUserclass UserInfo(AbstractUser):addr = models.CharField(max_length=255)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库(MySQL主从搭建|Django中实现MySQL读写分离|Django中使用MySQL连接池)

文章目录 一、MySQL主从搭建1.MySQL主从的目的&#xff1f;2.MySQL主从原理3.搭建步骤 二、Django中实现MySQL读写分离1.使用sqlite实现读写分离2.MySQL实现读写分离 三、Django中使用连接池1.使用池的目的2.Django中使用MySQL连接池 一、MySQL主从搭建 1.MySQL主从的目的&…

spark 参数

spark.yarn.executor.memoryOverhead 默认值是384M Configuration - Spark 3.5.1 Documentation

openGauss增量备份恢复

openGauss 增量备份恢复 openGauss 数据库自 2020 年 6 月 30 日发布以来&#xff0c;很多小伙伴都提到“openGauss 数据库是否有增量备份工具&#xff1f;“这么一个问题。 在 openGauss 1.0.0 版本的时候&#xff0c;关于这个问题的回答往往是&#xff1a;“Sorry…”&…

Unity中如何实现草的LOD

1&#xff09;Unity中如何实现草的LOD 2&#xff09;用Compute Shader处理图像数据后在安卓机上不能正常显示渲染纹理 3&#xff09;关于进游戏程序集加载的问题 4&#xff09;预制件编辑模式一直在触发自动保存 这是第379篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热…

STM32启动文件命名方式说明以及启动过程分析

1、启动文件的路径 cl&#xff1a;互联型产品&#xff0c;stm32f105/107系列 vl&#xff1a;超值型产品&#xff0c;stm32f100系列 xl&#xff1a;超高密度产品&#xff0c;stm32f101/103系列 flash容量大小&#xff1a; ld&#xff1a;小容量产品&#xff0c; 小于64KB md…

利用Python进行数据可视化Plotly与Dash的应用【第157篇—数据可视化】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 利用Python进行数据可视化Plotly与Dash的应用 数据可视化是数据分析中至关重要的一环&…

数字身份的革命:解锁 Web3 的身份验证技术

引言 随着数字化时代的到来&#xff0c;个人身份认证成为了日常生活和商业活动中不可或缺的一部分。传统的身份验证方式存在着安全性低、易伪造、不便利等问题&#xff0c;因此&#xff0c;人们迫切需要一种更安全、更便捷的身份验证技术。在这样的背景下&#xff0c;Web3的身…

Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页

作品概况 页面数量&#xff1a;共 50 页&#xff08;长期更新&#xff09; 兼容版本&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 应用领域&#xff1a;网页模板、网站后台、中台系统、B端系统 作品特色 本品为「web中后台系统页面设计实例模板」&#xff0c;默林原创…

Linux的启动流程、模块管理与Loader

文章目录 Linux的启动流程BIOS、boot loader与kernel加载 内核与内核模块内核模块与依赖性&#xff1a;depmod查看内核模块&#xff1a;lsmod、modinfo内核模块的加载与删除&#xff1a;insmod、rmmod、modprobe内核模块的额外参数设置&#xff1a;/etc/modprobe.d/*.conf Linu…

如何处理Flutter应用程序中的内存泄漏

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我想和大家分享一下如何处理Flutter应用程序中的内存泄漏问题。在Flutter开发中&#xff0c;内存泄漏是一个常见且需要重点关注的问题&#xff0c;它可能会导致应用程序性能下降&#xff0c;甚至引发崩溃。因此&…

PASSL代码解读[01] readme

介绍 PASSL 是一个基于 PaddlePaddle 的视觉库&#xff0c;用于使用 PaddlePaddle 进行最先进的视觉自监督学习研究。PASSL旨在加速自监督学习的研究周期&#xff1a;从设计一个新的自监督任务到评估所学的表征。 PASSL 主要特性&#xff1a; 自监督前沿算法实现 PASSL 实现了…

嵌入式开发——基础电路知识

1. 电路知识 1.1. 驱动能力 IC是数字逻辑芯片&#xff0c;其输出的是逻辑电平。逻辑电平0表示输出电压低于阈值电压&#xff0c;逻辑1表示输出电压高于阈值电压。负载则是被驱动的电路或元件&#xff0c;负载大小则指负载的电阻大小。 驱动能力主要表现在几个方面&#xff1…

基于Pytorch的验证码识别模型应用

前言 在做OCR文字识别的时候&#xff0c;或多或少会接触一些验证码图片&#xff0c;这里收集了一些验证码图片&#xff0c;可以对验证码进行识别&#xff0c;可以识别4到6位&#xff0c;纯数字型、数字字母型和纯字母型的一些验证码&#xff0c;准确率还是相当高&#xff0c;需…

Self-Consistency Improves Chain of Thought Reasoning in Language Models阅读笔记

论文链接&#xff1a;https://arxiv.org/pdf/2203.11171.pdf 又到了读论文的时间&#xff0c;内心有点疲惫。这几天还是在看CoT的文章&#xff0c;今天这篇是讲如何利用self-consistency&#xff08;自我一致性&#xff09;来改进大语言模型的思维链推理过程。什么是self-cons…

设置asp.net core WebApi函数输入和返回类型中的属性名称开头大小写格式

以下列类型定义为例创建简单的ASP.NET Core的WebApi函数&#xff0c;此时输入参数和返回结果的属性名称开头默认为小写&#xff0c;如下图所示。 public class UserInfo { public string UserName { get; set; }public string UserSex { get; set; }public string UserP…

班级综合测评管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. …

【pytest、playwright】allure报告生成视频和图片

目录 1、修改插件pytest_playwright 2、conftest.py配置 3、修改pytest.ini文件 4、运行case 5、注意事项 1、修改插件pytest_playwright pytest_playwright.py内容如下&#xff1a; # Copyright (c) Microsoft Corporation. # # Licensed under the Apache License, Ver…

PL/SQL概述

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 PL/SQL概述 PL/SQL(Procedural Language extension to SQL)是 Oracle 对标准 SQL语言的扩充&#xff0c;是专门用于各种环境下对 Oracle 数据库进行访问和开发的语言。 由…

服务器呀服务器,一个虚拟专用服务器的使用教程

目前刚接触服务器这一块的学习&#xff0c;这里记录一下解如何获取自己的第一台虚拟云服务器&#xff0c;给刚入行服务器开发的小伙伴做一个参考。 具体的步骤如下&#xff1a; 一、服务器的注册和获取 1、打开bwg88服务器平台地址&#xff1a;点击进入 https://bwh88.net/a…

基于云计算的前端资源管理系统的设计与实现

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着互联网的快速发展&#xff0c;前端资源管理成为了一个重要的课题。本文旨在设计并实…