django实操:换用自建mysql用户表(一次失败的经历)

前言

        别想了,基础不扎实的话,还是老老实实用django自带的用户模块吧!这是一次耗时而且失败了的经历。

        因为是一次失败的经历,这里我给出一些残酷的经验。

实操

        重写用户模型

        这是我唯一成功的案例,你需要建一个类似如下的django-orm模型  

        mysql_models.py 

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManagerclass TpUserManager(BaseUserManager):def create_user(self, username, password=None, **extra_fields):if not username:raise ValueError('The Username field must be set')user = self.model(username=username, **extra_fields)user.set_password(password)user.save(using=self._db)return userdef create_superuser(self, username, password=None, **extra_fields):extra_fields.setdefault('is_staff', True)extra_fields.setdefault('is_superuser', True)return self.create_user(username, password, **extra_fields)def authenticate(self, request, username=None, password=None):try:user = self.model.objects.get(username=username)if user.check_password(password) and user.state == 1 and user.user_type == 1:return userexcept self.model.DoesNotExist:return Noneclass TpUser(AbstractBaseUser):user_id = models.AutoField(primary_key=True, db_comment='自增id')user_type = models.IntegerField(blank=True, null=True, db_comment='用户类型,0为服务商,1为客户')username = models.CharField(unique=True, max_length=255, blank=True, null=True, db_comment='用户名')email = models.CharField(max_length=255, blank=True, null=True, db_comment='邮箱')is_active = models.IntegerField(blank=True, null=True, db_comment='是否')last_login = models.DateTimeField(blank=True, null=True, db_comment='上次登入时间')secret = models.CharField(max_length=255, blank=True, null=True, db_comment='授权码')password = models.CharField(max_length=255, blank=True, null=True, db_comment='密码')account_id = models.CharField(max_length=255, blank=True, null=True, db_comment='账户编码')create_time = models.DateTimeField(blank=True, null=True, db_comment='创建时间')state = models.IntegerField(blank=True, null=True, db_comment='当前状态,0为未启用,1为正常使用,2为封禁')objects = TpUserManager()  # 可能需要自定义用户管理器USERNAME_FIELD = 'username'REQUIRED_FIELDS = ['email']class Meta:managed = Falsedb_table = 'tp_user'

         同目录__init__.py

from .mysql_models import TpUser

        setting.py 

INSTALLED_APPS = [...'youproject',...
]AUTH_USER_MODEL = 'youproject.TpUser'

        

        遗憾点 

        authenticate和login均没有生效

        按理来讲,我继承了django原生auth的功能,但实际上两个方法都绕过了我改写的数据表,不知道最终调用了哪里的数据,导致登入功能完全无效。 

from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import authenticate, logindef user_input_check(username, password):message = ''if len(username) > 16:message = "用户名不得超过16位!"elif len(password) < 6:message = "密码不得少于6位!"elif len(password) > 16:message = "密码不得超过16位!"if message:return False, messageelse:return True, ''def login_view(request):if request.method == 'POST':username = request.POST['username']password = request.POST['password']print(username, password)ret, msg = user_input_check(username, password)if ret:user = authenticate(request, username=username, password=password)if user:login(request, user)return redirect('/welcome')  # 替换 'welcome' 为你应用的主页视图名else:messages.error(request, "用户名或密码错误!")else:messages.error(request, msg)return render(request, 'user/login.html')

        为此,我十分头疼,并花费了若干小时去解决,但最终决定放弃,转而采用触发器或者主动脚本的方式来实现自写数据表和django默认auth表的交互,进而实现django用户管理。

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

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

相关文章

springboot 的共享session方案?

问&#xff1a;springboot 的共享session方案&#xff1f; 参考&#xff1a; https://juejin.cn/post/7195227930077691963分布式之session共享问题 4种解决方案及spring session的使用_分布式session共享方案-CSDN博客 什么是 Session &#xff1f; 答&#xff1a;因为Http协…

JavaScript web API part1

web API 前言 变量声明 const优先&#xff0c;可变再改为let 原因&#xff1a; 语义化更好若以后变量不改变&#xff0c;就应用const声明实际开发中&#xff0c;react框架中基本都是从const [!IMPORTANT] 基本变量中数据若改变&#xff0c;则不可用const 数组&#xff0c;对…

计算机毕业设计Python+Tensorflow股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

《Tensorflow股票预测系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和金融市场的日益复杂化&#xff0c;股票作为金融市场的重要组成部分&#xff0c;其价格波动受到广泛关注。传统的股票预测方法如技术分析和基本面分析&#xff0c;虽然在一定程度上能够辅助投…

应用基本期末

选 以下哪些属于Java的三大特性&#xff1a; a. 抽象 b. 封装 c. 面向对象 d. 分布式 e. 安全性 f. 平台独立 以下哪些是Object的公用方法&#xff1f; a. equals() b. getContext() c. notify() d. toString() e. clone() int和integer两个谁更占用内存&#xff1f; a. Int …

如何查询、统计品牌在社媒平台的品牌声量?

现在各平台的竞争越来越激烈&#xff0c;企业想做好在社媒平台上的品牌营销&#xff0c;就需要时刻监测品牌声量的大小&#xff0c;比如企业品牌声量趋势、品牌sov值、搜索指数等相关指标&#xff0c;辅助衡量品牌宣传效果如何。那怎么去查询统计品牌声量情况呢&#xff1f;可以…

myql笔记三(表设计)

如何设计好一张表呢&#xff1f; 1 设计的表达到什么要求&#xff1f; 1.1 首先能满足业务需求&#xff1b; 1.2 增删改查性能尽可能高&#xff1b; 1.3 扩展方便&#xff1b; 1.4 命名规范&#xff1b; 2 明确该表的使用场景&#xff1f; 对每日数据增量和数据全量进行评估&a…

获取多行文本内容,去掉首尾空格、去掉空字符串,解析为文本数组

核心代码 // 获取多行文本内容&#xff0c;去掉首尾空格、去掉空字符串&#xff0c;解析为文本数组 getMultiLineTexts(textareaValue) {return textareaValue.split("\n").map((v) > v.split("\t").join("").trim()).filter((v, i, ar) &g…

@RabbitListener 注解详解

前言&#xff1a; RabbitListener 注解是 Spring AMQP 提供的注解&#xff0c;用于简化 RabbitMQ 消息监听器的创建&#xff0c;我们在方法上添加 RabbitListener 注解&#xff0c;就可以将方法注册为消息监听器&#xff0c;监听 RabbitMQ 的消息&#xff0c;本篇我们来分析一…

数据库的操作:SQL语言的介绍

一.前言 SQL是一种结构化查询语言。关系型数据库中进行操作的标准语言。 二.特点 ①对大小写不敏感 例如&#xff1a;select与Select是一样的 ②结尾要使用分号 没有分号认为还没结束; 三.分类 ①DDL&#xff1a;数据定义语言&#xff08;数据库对象的操作&#xff08;结…

std::atomic::fetch_add使用

fetch_add是一个原子操作&#xff0c;这个操作获取一个原子类型的当前值&#xff0c;将给定的递增值添加到这个原子值&#xff0c;然后返回原始的未递增的值。 将val添加到这个原子值中&#xff0c;并返回操作前的值。 整个操作是原子性的&#xff08;原子性的读-修改-写操作&a…

uniapp设置微信小程序的交互反馈

链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗&#xff1a; title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon&#xff1a;error是设置我们失败的logo 设置的文字上…

I/O复用之 epoll使用详解 Linux编程

epoll 是 Linux 内核提供的一种用于多路复用 I/O 事件通知的机制&#xff0c;专为高效处理大量并发连接而设计。它被广泛应用于网络服务器和高性能应用中&#xff0c;主要用于监控多个文件描述符&#xff08;如套接字、管道、文件等&#xff09;上的事件&#xff08;可读、可写…

MyBatis ——在java层面对MySQL数据库进行操作

目录 MyBatis 是一款优秀的 持久层框架&#xff0c;用于简化JDBC&#xff08;java操作数据库&#xff09;的开发&#xff1b; 使用MyBatis 查询所有用户数据的过程 Lombok是一个实用的]ava类库&#xff0c;能通过注解的形式 简化 JavaBean的代码 注解&#xff1a; 引入Myb…

【Leetcode152】乘积最大子数组(动态规划)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 &#xff08;0&#xff09;读懂题意&#xff1a;题目的“连续”是指位置的连续&#xff0c;而不是说数字的连续&#xff0c;这是个大坑。 &#xff08;1&#xff09;确定状态&#xff1a;定义两个状态来记录当前子数组的…

Python 爬虫项目实战(一):爬取某云热歌榜歌曲

前言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也称为网页蜘蛛&#xff08;Web Spider&#xff09;或网页机器人&#xff08;Web Bot&#xff09;&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

MySQL笔记2(DQL查询语言【条件、分组、排序、限制、子查询、左右连接、内连接、联合查询】)

DQL数据查询语言与项目高级查询实战 先安装数据库并创建一个库 并创建以下数据 /*创建部门表*/CREATE TABLE dept( deptnu INT PRIMARY KEY comment 部门编号, dname VARCHAR(50) comment 部门名称, addr VARCHAR(50) comment 部门地址 );/*某个公司的员工表*/ CREATE TABLE…

Python闭包示例代码

代码示例&#xff1a; def outer_function(x):def inner_function(y):return x yreturn inner_functionclosure_example outer_function(5) result closure_example(3) # 输出为 8在这个示例中&#xff0c;outer_function 是一个包含内部函数的闭包。让我们逐步分析它的工…

金融业开源技术 术语

金融业开源技术 术语 1 范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

安全设备类型

一、隔爆型 隔爆型定位设备是将可能产生火花、电弧和危险温度的零部件都放置在一个隔爆外壳内。当内部发生爆炸时&#xff0c;外壳能够承受爆炸压力而不损坏&#xff0c;并且不会使内部爆炸传播到周围的爆炸性环境中。隔爆型产品通常比较坚固耐用&#xff0c;但相对来说体积和重…

「ComfyUI」比 joy_caption 更好用的提示词反推模型!

前言 距离我们上次介绍 joy_caption 还没几天呢&#xff0c;这就又出新模型来与 joy_caption 一争高下了。 今天我们要介绍的是&#xff1a;Florence-2-X-PromptGen-v1.5&#xff0c;是在 Florence-2 的基础上进行精细调优的一款高级图像标注工具&#xff0c;专门为生成和标注…