Django 注册及创建订单商品
注册功能的实现
user/views
from rest_framework.generics import GenericAPIView
from rest_framework.views import APIViewfrom apps.user.models import User
from apps.user.serializers import UserSerializer
from utils import ResponseMessage
from utils.jwt_auth import create_token
from utils.password_encode import get_md5# Create your views here.
class UserApiView(APIView):# 注册功能的实现# def post(self,request):# request.data["password"] = get_md5(request.data.get("password"))# # 反序列化呀,把json变成一个对象 [这是关键的一句话]# user_data_serializer = UserSerializer(data=request.data)# user_data_serializer.is_valid(raise_exception=True)# user_data = User.objects.create(**user_data_serializer.data)## # 序列化一下,把json返回给前端对象# user_ser = UserSerializer(instance=user_data)# return JsonResponse(user_ser.data)def post(self,request):# 反序列化呀,把json变成一个对象 [这是关键的一句话]user_data_serializer = UserSerializer(data=request.data)user_data_serializer.is_valid(raise_exception=True)user_data = user_data_serializer.save()# 序列化一下,把json返回给前端对象user_ser = UserSerializer(instance=user_data)# return JsonResponse(user_ser.data)return ResponseMessage.UserResponse.success(user_ser.data)
user/urls
from django.urls import path
from .views import UserApiViewurlpatterns = [path("",UserApiView.as_view()),
]
user/serializers.py
import datetimefrom rest_framework import serializers
from rest_framework.validators import UniqueValidatorfrom apps.user.models import User
from utils.password_encode import get_md5class UserSerializer(serializers.ModelSerializer):# email作为用户名进行登录,这里我们需要做一个唯一性的验证email = serializers.EmailField(required=True,allow_blank=False,validators=[UniqueValidator(queryset=User.objects, message="用户已经存在了")])password = serializers.CharField(write_only=True)# password = serializers.CharField()birthday = serializers.DateTimeField("%Y-%m-%d %H:%M:%S")create_time = serializers.DateTimeField("%Y-%m-%d %H:%M:%S",required=False)# create方法会被自动调用,这里可以做一些数据的验证或者是存储之前数据的加工def create(self, validated_data):print("create方法被调用了")print(validated_data)validated_data["password"] = get_md5(validated_data["password"])validated_data["create_time"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")result = User.objects.create(**validated_data)return resultclass Meta:model = Userfields = "__all__"
utils/password_encode.py
import hashlib
def get_md5(param):md5 = hashlib.md5()md5.update(param.encode())return md5.hexdigest()
urls
path("user/", include("user.urls")),

用户个人中心获取 用户信息接口开发
class UserApiView(APIView):def get(self, request):email = request.GET.get("email")try:user_data = User.objects.get(email=email)user_ser = UserSerializer(user_data)return ResponseMessage.UserResponse.success(user_ser.data)except Exception as e:print(e)return ResponseMessage.UserResponse.failed("用户信息获取失败")

订单逻辑梳理与表的创建




订单商品表(点击去结算)

订单表(提交订单)

将数据库创建的表映射到本地模型类
python manage.py inspectdb --database default goods > apps/order/models.py
基于GenericAPIView视图的调用逻辑实现创建订单商品的接口开发
order/views
from django.http import JsonResponse
from django.shortcuts import render# Create your views here.
from rest_framework.generics import GenericAPIView
from apps.order.models import OrderGoods
from apps.order.serializers import OrderGoodsSerializerclass OrderGoodsGenericAPIView(GenericAPIView):queryset = OrderGoods.objectsserializer_class = OrderGoodsSerializerdef post(self, request):# trade_no = request.data.get("trade_no")# print(self.get_queryset())# print(self.get_serializer())print(request.data)# request.data 类型是 dict 转成object传dataser = self.get_serializer(data=request.data)ser.is_valid()ser.save()return JsonResponse("ok",safe=False)
order/urls
from django.contrib import admin
from django.urls import path
from .views import OrderGoodsGenericAPIViewurlpatterns = [path("goods/",OrderGoodsGenericAPIView.as_view()),]
order/serializers.py
from rest_framework import serializers
from apps.order.models import OrderGoodsclass OrderGoodsSerializer(serializers.ModelSerializer):class Meta:model = OrderGoodsfields = "__all__"
from django.db import modelsclass Order(models.Model):email = models.CharField(max_length=255, blank=True, null=True)order_amount = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)address_id = models.IntegerField(blank=True, null=True)pay_status = models.CharField(max_length=155, blank=True, null=True)pay_time = models.DateTimeField(blank=True, null=True)ali_trade_no = models.CharField(max_length=255, blank=True, null=True)is_delete = models.PositiveIntegerField(blank=True, null=True)create_time = models.DateTimeField(blank=True, null=True)update_time = models.DateTimeField(blank=True, null=True)class Meta:managed = Falsedb_table = 'order'class OrderGoods(models.Model):trade_no = models.CharField(max_length=255, blank=True, null=True)sku_id = models.CharField(max_length=255, blank=True, null=True)goods_num = models.IntegerField(blank=True, null=True)# create_time = models.DateTimeField(blank=True, null=True)class Meta:managed = Falsedb_table = 'order_goods'
urls
path("order/", include("order.urls")),

基于GenericAPIView视图调用逻辑实现获取订单商品接口开发
order/view.py
class OrderGoodsGenericAPIView(GenericAPIView):queryset = OrderGoods.objectsserializer_class = OrderGoodsSerializerdef post(self, request):print(request.data)# request.data 类型是 dict 转成object传dataser = self.get_serializer(data=request.data)ser.is_valid()ser.save()return JsonResponse("ok",safe=False)lookup_field = "trade_no"def get(self, request, trade_no):# 这一行代码就实现了数据库里所有数据的查询 self.get_queryset()拿到配置模型表中的所有数据 返回所有数据# 调用self.get_serializer 其实就是调用 serializer_class = OrderGoodsSerializer# return JsonResponse(self.get_serializer(instance=self.get_queryset(),many=True).data,safe=False)print(trade_no)# self.get_object() 调用该方法拿到lookup_field作为请求的参数直接传进去 其实就是加了某一个条件 返回一条数据ser = self.get_serializer(instance=self.get_object(), many=False)# 传many会报错# ser = self.get_serializer(instance=self.get_object(),many=True)return JsonResponse(ser.data, safe=False)

相关文章:
Django 注册及创建订单商品
注册功能的实现 user/views from rest_framework.generics import GenericAPIView from rest_framework.views import APIViewfrom apps.user.models import User from apps.user.serializers import UserSerializer from utils import ResponseMessage from utils.jwt_auth …...
15、Python -- 阶段总结:变量与流程控制
目录 变量变量没有类型,数据有类型 表达式程序流程 变量 变量:编程的本质就是处理数据,数据需要用变量保存 Python语言的特征: 所有变量无需声明,即可使用 变量没有类型 变量没有类型,数据有类型 已学过…...
信息检索与数据挖掘 | 【实验】排名检索模型
文章目录 📚实验内容📚相关概念📚实验步骤🐇分词预处理🐇构建倒排索引表🐇计算query和各个文档的相似度🐇queries预处理及检索函数🔥对输入的文本进行词法分析和标准化处理…...
玩转AIGC:打造令人印象深刻的AI对话Prompt
玩转AIGC:打造令人印象深刻的AI对话Prompt 《玩转AIGC:打造令人印象深刻的AI对话Prompt》摘要引言正文良好的Prompt:引发AI深度交流的法宝 ✨探讨不同的提问方式1. 常规提问2. 创意提问 对话交流的艺术:倾听与引导的巧妙平衡 ⚖️…...
uniapp vue国际化 i18n
一、安装 vue-i18n npm i vue-i18n 二、新建i18n目录 1、en.json 内容 {"loginPage":{"namePh":"Please enter your login account","passwordPh":"Please enter password"} } 2、zh-CN.json 内容 {"loginPage&qu…...
Docker 启动远程服务访问不了
今天一下午在弄这个 1、防火墙是否关了 firewall-cmd --state2、ip转发开没开 sysctl net.ipv4.ip_forward3、service iptables是不是打开并拦截了 4、检查docker启动的端口号是否一致,或者启动时对不对 5、检查docker的服务是否起来了,比如你的端口号…...
[ACTF2020 新生赛]Exec
【解题过程】 1.打开链接 得到一个能ping 的网站,可以推测这个可以在终端运行的网站。 2.解题思路 在执行的时候我们可以想到命令执行的“;”分号的作用:命令用分号分隔开来,表示它们是两个独立的命令,需要依次执行。…...
Git(三).git 文件夹详解
目录 一、初始化新仓库二、.git 目录2.1 hooks 文件夹2.2 info 文件夹2.3 logs 文件夹2.4 objects 文件夹【重要】2.5 refs 文件夹【重要】2.6 COMMIT_EDITMSG2.7 config2.8 description2.9 FETCH_HEAD2.10 HEAD【重要】2.11 index【重要】2.12 ORIG_HEAD2.13 packed-refs 官网…...
esp32-S3 + visual studio code 开发环境搭建
一、首先在下面链接网页中下载esp-idf v5.1.1离线安装包 ,并安装到指定位置。dl.espressif.cn/dl/esp-idf/https://dl.espressif.cn/dl/esp-idf/ 安装过程中会提示需要长路径支持,所以windows系统需要开启长路径使能 Step 1: 打开运行&…...
4.1 网络基础之网络IO
一、编写基本服务程序流程 1、创建套接字 #include <sys/types.h> #include <sys/socket.h>int socket(int domain, int type, int protocol);/* * 参数domain通讯协议族: * PF_INET IPv4互联网协议族(常用) * PF_INET6 …...
[100天算法】-和为 K 的子数组(day 39)
题目描述 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 :数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整…...
Leo赠书活动-02期 【信息科技风险管理:合规管理、技术防控与数字化】
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…...
L2-026 小字辈 - java
L2-026 小字辈 时间限制 400 ms 内存限制 64 MB 题目描述: 本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,…...
排序算法-堆积树排序法(HeapSort)
目录 排序算法-堆积树排序法(HeapSort) 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法(HeapSort) 1、说明 堆积树排序法是选择排序法的改进版,可以减少在选择排序法中的比较次数,进而减少排序…...
名词解释 MongoDB
MongoDB 是一个面向文档的数据库管理系统,它不使用传统的表格结构,而是将数据组织成类似文档的形式,通常使用JSON格式。 文档数据库:数据以文档的形式存储,每个文档可以包含不同的字段,就像一个文件可以包…...
Look Back(cf div3 905)
题意:给你一个长度为n((1≤n≤10^5)数组a[],你可以进行一个操作 使a[i]a[i]*2,问最少经过多少次这样的操作使的a[]不递减,a[i]>a[i-1]。 输入样例: 6 1 1 2 1 1 3 1 2 1 4 2 3 2 1 5 4 5 4 5 4 10 1 7 7 2 3 4 3 2 1 100 输出…...
Spring框架的发展历程
Spring框架的发展历程 自2004年以来,Spring框架已经成为Java开发人员最受欢迎的开源框架之一。它提供了一个全面的编程和配置模型,旨在简化企业级Java应用程序的开发过程。本文将详细介绍Spring框架的发展历程,以及它如何为Java开发人员提供…...
vue 级联查询5级--省/市/区/街道/社区
<template> <div> 1234 <el-select v-model="provinceVal" @change="selectProvinceFn" placeholder="请选择"> <el-option v-for="item in provinceList" :key="item.code" :label="item.name&q…...
C++并发与多线程(8) | 互斥量
一、互斥量(mutex)的基本概念 互斥量(Mutex)是一种用于多线程编程的同步机制,用于管理共享资源的访问,以确保线程之间不会同时访问某个共享资源,从而避免竞态条件(Race Condition)和数据损坏。下面是互斥量的基本概念: 互斥性(Mutual Exclusion):互斥量用于确保一…...
Power BI 傻瓜入门 3. 选择Power BI的版本
本章内容包括: Excel与Power BI的比较选择Power BI的桌面版和服务版之间的差异了解Microsoft提供的许可选项 挑选正确版本的Power BI可能就像参观世界上最大的糖果店:你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
