Django 所带的用户auth_user的坑点,authenticate()校验一直为None,校验与创建所遇到的问题整理与解决

news2025/7/8 22:22:01

整理一下django中用户模块自定义model后登录的一些问题:

        网上的报错解决不是万能方案,主要还是要自主分析原因,有的是有用但是导包之类的也要看清楚因为自己修改了所以有所变得,不自定义的话又不太好用。

在项目初期决定使用auth_user后就要设置好,如果在项目中期去改动的话就比较麻烦,需要吧数据库以及历史migrations文件除了__init__外全部删掉,数据库备份后全部删掉,再重新执行才能自定义使用上。migrations路径:

python3.10/site-packages/django/contrib/admin/migrations/000x(此处全删掉)

自定义继承创建model:

因为考虑到登录用邮箱比较好,所以设置了邮箱unique=True

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.db.models.fields import AutoField, BooleanField, EmailField
# Create your models here.

class User(AbstractUser):
    username = models.CharField(  # username是必需有的字段,字段名不能错
        max_length=20,
        null=False,
        blank=False,
        verbose_name='用户名'
    )
    password = models.CharField(max_length=256,null = False,blank=False,verbose_name="密码")
    plce = models.CharField(max_length=32,null=False,blank=False,verbose_name="地区")
    email = EmailField(unique=True)  # 给email弄成唯一的
    USERNAME_FIELD = 'email'  # 默认是username,这个字段有唯一索引
    REQUIRED_FIELDS = ['username']  # 指定必填字段,这里不填userna

这时候还需要在setting中添加:(项目.Model类名)

AUTH_USER_MODEL = 'app01.User'

接着执行:

python manage.py makemigrations
python manage.py migrate

就可以发现auth_user表没有了,变成了你的model表

原表获得user Model方法:

get_user_model()

创建用户:

终端方式:

python manage.py createsuperuser   #有超级权限
python manage.py createuser

代码:(未继承)

from django.contrib.auth.models import User

User.objects.create_user(username = '用户名', password = '密码', email = '邮箱', ...)

创建超级:替换成create_superuser()

如果你是自定义了model这样导包则会报错:

解决:

分析:因为我们定义抽象模型类,并且在settings中设置了所以导包需要改变,改为用model的方式


from django.contrib.auth.models import User
然后将其替换为:
 
from user.models import MyUser as User

重设密码:同样需要是用替换后的包定位自己后

email = request.user.email
obj = User.objects.filter(email = email).first()
obj.set_password(password)
obj.save()

校验问题:authenticate()校验一直为None,不断测试依旧失败

authenticate()的参数提交username,和password这里自己踩了一个很大的坑!

用了超级久去测试解决

解决方法:

按照上面的思路下来,这个方法是没有任何问题的,问题是出在了参数上面,username,和password看上去顾名思义是用户名和密码,但底层确是根据表的unique=True,谁是主唯一来确定,上面表我定义了邮箱所以校验为邮箱!

authenticate()参数只有request(可以忽略),username,password

并非这样使用authenticate(email=email,password=password)

正确使用方法:authenticate(username=email,password=password)返回的结果是一个用户(在此就是邮箱号)

登录与退出:

login用法简单只需要在校验后有了user放入即可,logout则只需要request

会自动生成session,与释放session

登陆后在视图中使用request.user.xx(model的字段)即可获得相应数据

login(request,user)    #user为校验后的赋值

#登出视图:
def logouts(request):
    logout(request)
    return redirect("/login/")

额外功能:

is_authenticated()

用来判断当前请求是否通过了认证

def my_view(request):
    if not request.user.is_authenticated():
        x x x
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

login_requierd()

auth 给我们提供的一个装饰器工具,用来快捷的给某个FBV视图添加登录校验。

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):

 

auth 给我们提供的一个装饰器工具,用来快捷的给某个CBV视图添加登录校验。

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class Home(views.View):

    @method_decorator(login_required)
    def get(self, request):
        return render(request, 'home.html')

若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。 LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由

User对象:

  • is_staff : 用户是否拥有网站的管理权限.
  • is_active : 是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。

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

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

相关文章

鸡卵白蛋白偶联脂多糖(OVA-LPS),麻黄多糖修饰卵白蛋白(PB-OVA)

产品名称:鸡卵白蛋白偶联脂多糖 英文名称:OVA-LPS 用途:科研 状态:固体/粉末/溶液 产品规格:1g/5g/10g 保存:冷藏 储藏条件:-20℃ 储存时间:1年 脂多糖(Lipopolysacchar…

第四站:数组

目录 一、一维数组的创建和初始化 1.数组的创建 (1)基本定义,创建方式 (2)经典的错误标准的零分 2.数组的初始化 3.一维数组的使用 4.一维数组在内存中的存储 二、二维数组的创建和初始化 1.二维数组的创建 2…

SpringBoot SpringBoot 开发实用篇 2 配置高级 2.2 松散绑定

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇2 配置高级2.2 松散绑定2.2.1 问题引入2.2.2 松散绑定2.2.3 小结2 配…

MySQL学习笔记:模型2

序言 《MySQL45讲》 为什么表数据删除一半,表文件大小不变? 表数据既可以存在共享表空间里,也可以是单独的文件。这个行为是由参数 innodb_file_per_table 控制的: 这个参数设置为 OFF 表示的是,表的数据放在系统共…

错字修改 | 布署1个中文文文本拼蟹纠错模型

内容一览:中文文本错误的种类之一为拼写错误,本篇文章为利用 BART 预训练方法实现中文文本纠错功能的模型部署教程。 关键词:BART 中文拼写纠错 NLP 本文首发自微信公众号:HyperAI超神经 中文文本错误3大障碍:拼写、语…

Chapter9.1:线性系统的状态空间分析与综合(上)

此系列属于胡寿松《自动控制原理题海与考研指导》(第三版)习题精选,仅包含部分经典习题,需要完整版习题答案请自行查找,本系列属于知识点巩固部分,搭配如下几个系列进行学习,可用于期末考试和考研复习。 自动控制原理(…

第六节.常用Linux命令—chmod修改目录权限,组管理,用户管理

第六节.常用Linux命令—chmod修改目录权限,组管理,用户管理 1. chmod:可以修改用户/文件/目录的权限 1).命令格式: chmod(代表增加权限)/-(代表减少权限) r(可读权限)w(可写权限)x(可执行权限) 文件名/目录名 2.组管理: 1).终端…

年产5000吨饼干食品加工厂的工艺设计

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1概述 1 1.2饼干的特点 1 1.2.1适宜大规模生产 1 1.2.2容易消化吸收 1 1.2.3食用方便 1 1.2.4营养价值高 2 1.3设计依据 2 1.4 设计范围 2 1.4.1 一般部分 2 1.4.2 重点部分 2 1.4.3 图纸 3 1.5设计指导思想 3 1.5.1 指导思想 3 1.5.…

org.activiti.validation.validator

org.activiti.validation.validator目录概述需求:设计思路实现思路分析1.ActivitiEventListenerValidator3.AssociationValidator4.validateAtLeastOneExecutable5.DataObjectValidator拓展实现参考资料和推荐阅读Survive by day and develop by night. talk for im…

【信号和槽】

前言 信号和槽是QT界面框架的一个核心特性,其重要性和MFC的消息映射机制一样。只要用QT开发项目,就一定会用到,所以必须100%熟练掌握,烂熟于心。 0x0 需要理解的概念 信号:特定情况下被发射的事件。鼠标单击按钮&…

基于复合粒子群优化的模糊神经预测控制的研究(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

boot+mp搭建版本踩坑记录

最近项目搭建中遇到的一些问题,涉及到 mp 版本 swagger集成等 文章目录前言一、引入mp启动报错1 相关配置2 报错 如下3 解决方案二、引入swagger1 引入的pom2 报错如下:3 解决方案三. 项目启动自动打开swagger页面总结前言 由于使用高版本springboot 导致集成遇到的一些问题 一…

Spring Boot+Netty+Websocket实现后台向前端推送信息

Netty 是一个利用 Java 的高级网络的能力&#xff0c;隐藏其背后的复杂性而提供一个易于使用的API的客户端/服务器框架。 可能在此之前你没有接触过&#xff0c;不过不要担心&#xff0c;下面我们通过一个消息推送的例子来看一下netty是怎么使用的。 1.添加Maven依赖 <!--…

动态代理静态代理

一、使用背景 将目标类包裹起来&#xff0c;对目标类增加一个前置操作和一个后置操作&#xff0c;比如添加日志&#xff0c;在调用目标类前、调用目标后添加日志。 感觉静态代理与动态代理的核心思想&#xff0c;都是根据目标类&#xff0c;拿到目标实现的接口&#xff0c;和…

【软考】-- 操作系统(上)

目录&#xff1a;操作系统&#xff08;上&#xff09;第一节 操作系统概述&#x1f384;一、操作系统基本概念1️⃣操作系统的五大部分&#xff1a;&#x1f38b;二、操作系统的分类1️⃣批处理操作系统&#xff1a;2️⃣分时操作系统&#xff1a;3️⃣实时操作系统&#xff1a…

STC51单片机28——跑马灯

//使用P1口流水点亮8位LED #include<reg51.h> //包含单片机寄存器的头文件 /**************************************** 函数功能&#xff1a;延时一段时间 *****************************************/ void delay(void) { unsigned char i,j; for(i…

Jetpack Compose 重写TopAppBar 实现标题多行折叠

没有效果图一律当水贴处理 效果动图 前言 想用composes实现类似CSDN的文章详细页面的标题栏 上滑隐藏标题后标题栏显示标题 compose.material3下的TopAppBar不能嵌套滚动 MediumTopAppBar 便使用了MediumTopAppBar一开始用着没什么问题&#xff0c;但是标题字数多了&…

一天完成react面试准备

什么是 React的refs&#xff1f;为什么它们很重要 refs允许你直接访问DOM元素或组件实例。为了使用它们&#xff0c;可以向组件添加个ref属性。 如果该属性的值是一个回调函数&#xff0c;它将接受底层的DOM元素或组件的已挂载实例作为其第一个参数。可以在组件中存储它。 ex…

字体图标以及svg图片的使用vite和webpack

先说下字体图标的使用 首先去阿里巴巴矢量图标库&#xff0c;选择你需要的图标&#xff08;可将svg图片自己上传&#xff09;添加到项目里&#xff0c;可以生成在线链接&#xff0c;或者下载资源包到本地。 资源包形式&#xff1a;在项目里创建一个fonts文件夹&#xff0c;将下…

linux 安装rar工具

1.到官网下载对应的编译包 点击跳转 也可以直接到我上传的资源去下载 https://download.csdn.net/download/liudongyang123/87032929https://download.csdn.net/download/liudongyang123/870329292.解压 tar -xf rarlinux-x64-620b2.tar.gz 3.进入到解压后的文件夹&#xf…