Django Auth的基本使用

auth 组件

导包

from django.contrib import auth

1. 登录

    对比用户和秘密是否正确
    user_obj = auth.authenticate(request, username=username, password=password)

    保存用户信息  (存到 djang_session表中)
    auth.login(request, user_obj)

1.1

    def login(request):
        if request.method == "POST":
            username = request.POST.get('username')
            password = request.POST.get('password')

            print(username, password)

            判断用户是否存在
            user_obj = auth.authenticate(request, username=username, password=password)

            if user_obj:
                如果登录就保存用户信息  (存到 djang_session表中)
                auth.login(request, user_obj)
                return redirect(reverse('index'))

        return render(request, 'login.html')


2. 验证是否登录 装饰器

from django.contrib.auth.decorators import login_required

2.1 视图中使用

@login_required(login_url='/auth/app/login/')
def index(request):
        print(request.user)
        return HttpResponse('index')

2.2 装饰器配置

    全局:
        在setting.py 下
        LOGIN_URL = "/auth/app/login/"

        视图上:
            @login_required
            def index(request):
                print(request.user)
                return HttpResponse('index')

    局部:
        @login_required(login_url='/auth/app/login/')
        def index(request):
            print(request.user)
            return HttpResponse('index')

优先级:
        局部 > 全局


3. 修改密码

# 检验旧密码
old_password = '11111'
request.user.check_password(old_password)

# 设置新密码
new_password = '111111'
request.user.set_password(new_password)

# 操作数据库 保存密码
request.user.save()


4. 退出登录

    auth.logout(request)

    @login_required
    def logout(request):
        """ 退出登录 """
        auth.logout(request)
        return redirect(reverse('login'))


5. 注册

    # 导入auth 模型
    from django.contrib.auth.models import User

    # 创建普通用户
    User.objects.create_user(username='', password='')

    # 创建超级用户
    # 使用代码 创建超级用户 需填邮箱  命令行创建 不填也可以
    User.objects.create_superuser(username='', email='', password='')

6. 拓展 User 表

    # models.py

    from django.contrib.auth.models import User, AbstractUser

    继承 AbstractUser
    auth_user 表就不会创建
    会在自己创建的模型中 出现自己创建的字段 和 auth_user的所有字段

    要求:
        1. 在auth_user表未创建
        2. 在settings.py中
            AUTH_USER_MODEL = 'app01.UserInfo'
                                (应用名.模型名)
                                ( 前边是自己的 app . 后边的是自己的模型名 )

    class UserInfo(AbstractUser):
        pass


7. 检查用户的状态和权限:

request.user.is_authenticated: 用户是否已登录
request.user.is_staff: 用户是否是管理员
request.user.is_superuser: 用户是否是超级管理员
request.user.is_active: 用户是否激活
request.user.is_anonymous: 用户是否为匿名用户

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

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

相关文章

泷羽sec-shell脚本(全) 学习笔记

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

鸿蒙学习使用模拟器运行应用(开发篇)

文章目录 1、系统类型和运行环境要求2、创建模拟器3、启动和关闭模拟器4、安装应用程序包和上传文件QA:在Windows电脑上启动模拟器,提示未开启Hyper-V 1、系统类型和运行环境要求 Windows 10 企业版、专业版或教育版及以上,且操作系统版本不低于10.0.18…

Web API - Clipboard

Clipboard API ,它允许我们与用户的剪贴板进行交互,实现复制和粘贴的功能。 Clipboard API 提供了以下方法,用于实现复制和粘贴: navigator.clipboard.writeText(text):这个方法用于将给定的文本复制到剪贴板。如果操…

MySQL 利用JSON特性完成复杂数据存储和查询

情景描述 下面一个应用场景,是数据库需要存储文库类的信息。文库分多个种类,比如图书类、论文类等多个类别,每个类别有不同的字段信息。 常规处理方法 要在单张表中去存储不同种类的文库数据,表就会变成这样的结构: …

【数据结构】哈希 ---万字详解

unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到log_2 N,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好 的查询是&#xff0c…

单例模式的理解和实践

在软件开发中,设计模式是开发者在特定情境下,对常见问题的通用解决方案。这些模式帮助开发者以更高效、可维护的方式编写代码。其中,单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个…

zerotier实现内网穿透

zerotier的内网穿透 前言一、zerotier的框架认知二、客户端安装设置1.linux2.windows 前言 摸索了一阵,看了好几篇,没有讲清楚。争取这次说清楚。 一、zerotier的框架认知 先认识一下zerotier的框架,这样如何处理就很好理解了。 首先上zero…

windows11 使用体验记录

好的地方: UI上字体风格貌似更好看了,文件夹增加了多个标签,类似于浏览器既可以打开多个窗口,也可以在同一个窗口中打开多个标签页 不好的地方: 桌面右下角点击日期时间,显示日期,时间呢&…

牛客周赛 Round 70 A-E

本期封面原图 画师村カルキ 牛客周赛 Round 70 五题 A - 小苯晨跑 思路 没啥好说的 代码 // // Created by Swan416 on 2024-12-01 18:57. // #include <bits/stdc.h> #define maxOf(a) *max_element(a.begin(),a.end()) #define minOf(a) *min_element(a.begin(),a.…

C++20: 像Python一样split字符串

概要 Python 的字符串天生支持 split( ) 操作&#xff0c;支持单个字符或字符串作为分隔符。 C 在这方面显得很笨拙&#xff0c;但是在 C20 下经过一番尝试&#xff0c;还是能够提供类似的简洁调用。 Python 代码 s 0,11,336,23,370nums s.split(,) for n in nums:print(n…

oracle数据库日常操作

1、执行SQL语句后不显示PL/SQL procedure successfully completed set feedback off; 2、显示实例名称 echo "set sqlprompt \"_user_connect_identifier> \"" >> $ORACLE_HOME/sqlplus/admin/glogin.sql 3、客户端尝试连接到服务器时发生超时 …

【Redis篇】Hash的认识以及相关命令操作

目录 前言 基本命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX HINCRBY HINCRBYFLOAT 内部编码 高内聚&#xff0c;低耦合 前言 可以看出&#xff1a; Redis 的 Hash 是一个键&#xff08;key&#xff09;下包含多个字段&#xff08;field…

可解释机器学习 | Python实现LGBM-SHAP可解释机器学习

机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计基本介绍模型使用参考资料基本介绍 LightGBM(Light Gradient Boosting Machine)是一种基于决策树的梯度提升框架,是一种高效的机器学习模型。SHAP(SHapley Additive exPlan…

<回文判断>

【问题描述】 回文是正读和倒读都一样的句子。读入一个最大长度不超过50个字符的句子&#xff0c;判断其是否是回文。 【输入形式】 输入一个最大长度不超过50个字符的句子 【输出形式】 Yes/No 【输入样例】 abcba 【输出样例】 Yes 【样例说明】 输入abcba&#xff0c;判…

VPP多架构处理器支持

对于转发层面的关键节点&#xff08;node&#xff09;&#xff0c;VPP针对处理器架构编译多份代码&#xff0c;在运行时检测处理器架构&#xff0c;动态确定使用的代码分支。VPP提供两种对多处理器架构的支持&#xff0c;除了节点函数外&#xff0c;还可指定任意函数支持多架构…

算法2--滑动窗口

滑动窗口 滑动窗口经典例题长度最小的子数组无重复字符的最长子串[最大连续1的个数 III](https://leetcode.cn/problems/max-consecutive-ones-iii/description/)[将 x 减到 0 的最小操作数](https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/description…

mysql--二进制安装编译安装yum安装

二进制安装 创建用户和组 [rootlocalhost ~]# groupadd -r -g 306 mysql [rootlocalhost ~]# useradd -r -g 306 -u 306 -d /data/mysql mysql 创建文件夹并添加所属文件用户和组 [rootlocalhost ~]# mkdir -p /data/mysql [rootlocalhost ~]# chown mysql:mysql /data/mysql …

大模型开发和微调工具Llama-Factory-->WebUI

WebUI LLaMA-Factory 支持通过 WebUI 零代码微调大模型。 通过如下指令进入 WebUI llamafactory-cli webui# 如果是国内&#xff0c; # USE_MODELSCOPE_HUB 设为 1&#xff0c;表示模型从 ModelScope 魔搭社区下载。 # 避免从 HuggingFace 下载模型导致网速不畅 USE_MODELSC…

【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格

问题&#xff1a;实现如下图的效果 解答&#xff1a; 一、函数 IFERROR(TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2))),(ROW(A1)-1)*LEN($A$2)1,LEN($A$2))),"") 二、在单元格C2中填写如下函数 三、全选要填充的单元格并且按CTRLD 函数…

Java有关数组的相关问题

Java中的栈和堆的含义 栈 存储局部变量&#xff1a;栈主要用于存储方法中的局部变量&#xff0c;包括基本数据类型&#xff08;int、double、boolean等&#xff09;和对象的引用&#xff08;不包含对象本身&#xff09;。 遵循后进先出原则&#xff1a;当一个方法被调用时&…