Django+Vue3前后端分离学习(四)(登录功能实现)
1、序列化数据:
创建serializers.py的python文件
从rest_framework里导入serializers类:
from rest_framework import serializers
class LoginSerializer(serializers.Serializer):email = serializers.EmailField(required=True, error_messages={"required": "请输入邮箱!"})password = serializers.CharField(max_length=20, min_length=6)# 重写校验def validate(self, attrs):email = attrs.get('email')password = attrs.get('password')if email and password:user = OAUser.objects.filter(email=email).first()if not user:raise serializers.ValidationError("请输入正确的邮箱!")if not user.check_password(password):raise serializers.ValidationError("请输入正确的密码!")# 判断状态if user.status == UserStatusChoices.UNACTIVE:raise serializers.ValidationError("该用户尚未激活!")elif user.status == UserStatusChoices.LOCKED:raise serializers.ValidationError("该用户已被锁定,请联系管理员!")# 为了节省执行SQL语句的次数,这里我们把user直接放到attrs中,方便在视图中使用attrs['user'] = userelse:raise serializers.ValidationError('请传入邮箱和密码!')return attrs
2、创建authentications.py文件
安装jwt:
pip install PyJWT
import jwt
import time
from django.conf import settings
from rest_framework.authentication import BaseAuthentication, get_authorization_header
from rest_framework import exceptions
from jwt.exceptions import ExpiredSignatureError
from .models import OAUserdef generate_jwt(user):expire_time = time.time() + 60 * 60 * 24 * 7return jwt.encode({"userid": user.pk, "exp": expire_time}, key=settings.SECRET_KEY)class UserTokenAuthentication(BaseAuthentication):def authenticate(self, request):# 这里的request:是rest_framework.request.Request对象return request._request.user, request._request.authclass JWTAuthentication(BaseAuthentication):keyword = 'JWT'def authenticate(self, request):auth = get_authorization_header(request).split()if not auth or auth[0].lower() != self.keyword.lower().encode():return Noneif len(auth) == 1:msg = "不可用的JWT请求头!"raise exceptions.AuthenticationFailed(msg)elif len(auth) > 2:msg = '不可用的JWT请求头!JWT Token中间不应该有空格!'raise exceptions.AuthenticationFailed(msg)try:jwt_token = auth[1]jwt_info = jwt.decode(jwt_token, settings.SECRET_KEY, algorithms='HS256')userid = jwt_info.get('userid')try:# 绑定当前user到request对象上user = OAUser.objects.get(pk=userid)setattr(request,'user', user)return user, jwt_tokenexcept:msg = '用户不存在!'raise exceptions.AuthenticationFailed(msg)except ExpiredSignatureError:msg = "JWT Token已过期!"raise exceptions.AuthenticationFailed(msg)
3、登录的话涉及增删改查,所以直接用rest_framework提供的APIView
导入:
from rest_framework.views import APIView
from .serializers import LoginSerializer, UserSerializer
from .authentications import generate_jwt
from rest_framework.response import Response
class LoginView(APIView):def post(self, request):# 1. 验证数据是否可用serializer = LoginSerializer(data=request.data)if serializer.is_valid():user = serializer.validated_data.get('user')user.last_login = datetime.now()user.save()# 生成tokentoken = generate_jwt(user)return Response({'token': token, 'user': UserSerializer(user).data})else:# person = {"username": "张三", "age": 18}# person.values() = ['战三', 18] dict_valuesdetail = list(serializer.errors.values())[0][0]# drf在返回响应是非200的时候,他的错误参数名叫detail,所以我们这里也叫做detailreturn Response({"detail": detail}, status=status.HTTP_400_BAD_REQUEST)
User对象实例化 使用serializers.ModelSerializer:
class UserSerializer(serializers.ModelSerializer):class Meta:model = 0AUserfields = "__all__"
嵌套定义:
class DepartmentSerializer(serializers.ModelSerializer):class Meta:model = OADepartmentfields = "__all__"class UserSerializer(serializers.ModelSerializer):department = DepartmentSerializer()class Meta:model = OAUser# fields = "__all__"exclude = ('password', 'groups', 'user_permissions')
相关文章:
Django+Vue3前后端分离学习(四)(登录功能实现)
1、序列化数据: 创建serializers.py的python文件 从rest_framework里导入serializers类: from rest_framework import serializers class LoginSerializer(serializers.Serializer):email serializers.EmailField(requiredTrue, error_messages{&qu…...
机器学习面试:SVM为什么使用对偶函数求解?
支持向量机(SVM)在求解过程中使用对偶函数的原因主要与优化问题的性质、计算效率以及模型的泛化能力有关。以下是对偶函数在 SVM 中使用的详细解释: 1. 原始问题与对偶问题 在 SVM 中,我们的目标是找到一个超平面来最大化分类间…...
RabbitMQ 入门教程
介绍 RabbitMQ 是一个消息中间件,它实现了 AMQP (Advanced Message Queuing Protocol) 协议。本教程将引导你通过几个简单的步骤来学习如何使用 RabbitMQ 发送和接收消息。 环境准备 1. 安装 RabbitMQ - 在你的系统上安装 RabbitMQ: https://www.rabbitmq.com/d…...
docker进阶 compose等
Docker Compose 简介: 比如有100个微服务,不需要手动启动每一个,可以使用docker compose定义运行多个容器,高效管理化。 定义、运行多个容器 YAML file配置文件 single command 命令 写docker-compose.yaml docker-compose …...
[详细建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级
A 题 “板凳龙” 闹元宵 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头,龙身和龙尾相随盘旋&#x…...
网络编程(TCP+网络模型)
【1】TCP 初版服务器 #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h…...
Docker Image 命令
文章目录 目录 文章目录 1 . Docker镜像是什么? 2 . 镜像命令详解 docker images docker tag docker pull docker rmi docker save 总结 1 . Docker镜像是什么? Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、 源码、库文件…...
如何在IntelliJ IDEA中将Tab设置为4个空格
前言 IntelliJ IDEA是一个强大的开发工具,支持多种编程语言。为了保持代码整洁一致,开发者经常需要调整编辑器中的Tab和缩进设置。 步骤1: 打开设置 首先,启动IntelliJ IDEA。在主界面上方的菜单栏中找到 File(文件)…...
ASP.NET Core 入门教学十五 异步编程
在ASP.NET Core中,异步编程是一种非常重要的技术,它可以提高应用程序的性能和响应能力。本教程将介绍如何在ASP.NET Core中使用异步编程。 1. 异步编程基础 异步编程允许程序在等待某些操作(如I/O操作)完成时继续执行其他任务&a…...
pycharm 2024.1下载、安装
下载 下载官网: Other Versions - PyCharm 选择需要的版本下载,这里以 2024.1 的版本为例 安装 双击下载好的安装程序,点击下一步 选择安装路径,最好是英文路径;然后下一步 点击完成 激活 网址: Some…...
实变函数精解【18】
文章目录 有限测度有限测度概率测度有限测度与概率测度的关系 σ \sigma σ-有限测度计数测度完备概率测度 参考文献 有限测度 首先,我们来明确“测度”的概念。在数学中,测度是一个将集合映射到非负实数(通常是实数的扩展,包括正…...
【深入解析】AI工作流中的HTTP组件:客户端与服务端执行的区别
在当今快速发展的技术环境中,AI工作流的设计和实现变得愈发重要。尤其是在处理HTTP组件时,前端执行与后端执行之间的区别,往往会对系统的安全性和数据的准确性产生深远的影响。今天,我们就来深入探讨这一话题,揭示前端…...
用亚马逊云科技Graviton高性能/低耗能处理器构建AI向量数据库(上篇)
简介: 今天小李哥将介绍亚马逊推出的云平台4代高性能计算处理器Gravition,并利用该处理器构建生成式AI向量数据库。利用向量数据库,我们可以开发和构建多样化的生成式AI应用,如RAG知识库,特定领域知识的聊天机器人等。…...
调用火山云的语音生成TTS和语音识别STT
首先需要去火山云的控制台开通TTS和STT服务语音技术 (volcengine.com) 火山这里都提供了免费的额度可以使用 我这里是使用了java来调用API 目前我还了解到阿里的开源项目SenseVoice(STT)和CosyVoice(TTS)非常的不错,但是都是使用Python开发…...
中间件解析漏洞
一:IIS less-1 IIS6.X 步骤一:在iis的⽹站根⽬录新建⼀个名为x.asp的⽂件 步骤二:在x.asp中新建⼀个.txt⽂件,内容为<%now()%> asp代码,更改后缀为jpg 步骤三:在外部浏览器进行访问Window2003的ip/x.asp/1.jpg࿰…...
如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)
Stable Diffusion是一款强大的AI生成图像模型,它可以基于文本描述生成高质量的图像。对于想要在本地运行此模型的用户来说,使用Mac电脑部署Stable Diffusion是一个非常吸引人的选择,特别是对于M1或M2芯片的用户。本文将详细介绍如何在Mac上本…...
FPGA随记——移位寄存器
数电知识——移位寄存器:移位寄存器——数电第六章学习-CSDN博客 移位寄存器在FPGA中:FPGA原理与结构(5)——移位寄存器(Shift Registers)-CSDN博客...
Java | Leetcode Java题解之第390题消除游戏
题目: 题解: class Solution {public int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step s…...
新型PyPI攻击技术可能导致超2.2万软件包被劫持
一种针对 Python 软件包索引(PyPI)注册表的新型供应链攻击技术已在野外被利用,并且目前正试图渗透到下游组织中。 软件供应链安全公司 JFrog 将其代号定为Revival Hijack,并称这种攻击方法可用于劫持 2.2万个现有 PyPI 软件包&am…...
spring cloud gateway 之删除请求头
在使用spring gateway作为网关时,我们经常需要在将请求转发到下游服务时,过滤掉某些请求头,以避免不必要的信息泄露,而spring gateway提供了RemoveRequestHeader内置的过滤器帮我们实现该功能,此外,我们也可…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
