当前位置: 首页 > news >正文

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预处理及检索函数🔥对输入的文本进行词法分析和标准化处理&#x1f…...

玩转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通讯协议族&#xff1a; * PF_INET IPv4互联网协议族&#xff08;常用&#xff09; * PF_INET6 …...

[100天算法】-和为 K 的子数组(day 39)

题目描述 给定一个整数数组和一个整数 k&#xff0c;你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 :数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] &#xff0c;且整…...

Leo赠书活动-02期 【信息科技风险管理:合规管理、技术防控与数字化】

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…...

L2-026 小字辈 - java

L2-026 小字辈 时间限制 400 ms 内存限制 64 MB 题目描述&#xff1a; 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 输入格式&#xff1a; 输入在第一行给出家族人口总数 N&#xff08;不超过 100 000 的正整数&#xff09; —— 简单起见&#xff0c…...

排序算法-堆积树排序法(HeapSort)

目录 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 2、算法分析 3、C代码 排序算法-堆积树排序法&#xff08;HeapSort&#xff09; 1、说明 堆积树排序法是选择排序法的改进版&#xff0c;可以减少在选择排序法中的比较次数&#xff0c;进而减少排序…...

名词解释 MongoDB

MongoDB 是一个面向文档的数据库管理系统&#xff0c;它不使用传统的表格结构&#xff0c;而是将数据组织成类似文档的形式&#xff0c;通常使用JSON格式。 文档数据库&#xff1a;数据以文档的形式存储&#xff0c;每个文档可以包含不同的字段&#xff0c;就像一个文件可以包…...

Look Back(cf div3 905)

题意&#xff1a;给你一个长度为n&#xff08;(1≤n≤10^5)数组a[]&#xff0c;你可以进行一个操作 使a[i]a[i]*2,问最少经过多少次这样的操作使的a[]不递减,a[i]>a[i-1]。 输入样例&#xff1a; 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年以来&#xff0c;Spring框架已经成为Java开发人员最受欢迎的开源框架之一。它提供了一个全面的编程和配置模型&#xff0c;旨在简化企业级Java应用程序的开发过程。本文将详细介绍Spring框架的发展历程&#xff0c;以及它如何为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的版本

本章内容包括&#xff1a; Excel与Power BI的比较选择Power BI的桌面版和服务版之间的差异了解Microsoft提供的许可选项 挑选正确版本的Power BI可能就像参观世界上最大的糖果店&#xff1a;你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模&#xf…...

别再手动发卡了!2025新版ZFAKA搭配宝塔面板,30分钟搞定你的专属自动售卡站

2025年ZFAKA自动售卡系统&#xff1a;零基础30分钟搭建全攻略 在数字商品交易日益火爆的今天&#xff0c;手动处理订单不仅效率低下&#xff0c;还容易出错。想象一下凌晨三点被订单提醒吵醒&#xff0c;手忙脚乱地复制卡密发给买家——这种场景对于个体创业者来说再熟悉不过了…...

基于麻雀优化算法(SSA)优化shared TCN-Transformer模型超参数,实现时间...

基于麻雀优化算法&#xff08;SSA&#xff09;优化shared TCN-Transformer模型超参数&#xff0c;实现时间序列预测。[1]模型采用共享TCN结构&#xff0c;用于提取Encoder Embedding和Decoder Embedding 的因果特征&#xff0c;在尽可能保证模型复杂度不变的情况下&#xff0c;…...

OpenClaw任务监控方案:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF长链条任务管理技巧

OpenClaw任务监控方案&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF长链条任务管理技巧 1. 为什么需要长链条任务监控 去年冬天&#xff0c;当我第一次用OpenClaw执行一个包含12个步骤的自动化流程时&#xff0c;系统在凌晨3点卡在了第7步——模型因为To…...

GreptimeDB高可用架构深度解析:5大核心策略保障业务连续性

GreptimeDB高可用架构深度解析&#xff1a;5大核心策略保障业务连续性 【免费下载链接】greptimedb An open-source, cloud-native, distributed time-series database with PromQL/SQL/Python supported. 项目地址: https://gitcode.com/GitHub_Trending/gr/greptimedb …...

别再手动改配置了!用Docker Compose一键部署带Web管理界面的Pulsar独立集群

告别手动配置&#xff1a;Docker Compose全自动部署Pulsar集群与Web管理平台 每次搭建开发环境都要重复输入十几条Docker命令&#xff1f;配置文件散落在各个角落难以维护&#xff1f;今天我要分享的这套方案&#xff0c;将彻底改变你部署消息队列的方式。只需一个YAML文件&…...

别再纠结硬件滚动了!用Arduino+SSD1306库实现超长文本的软件滚动显示(附完整代码)

ArduinoSSD1306实现超长文本流畅滚动的终极方案 当你在创客项目中需要显示超出屏幕宽度的日志数据或长消息时&#xff0c;硬件滚动的局限性就会暴露无遗。我曾在一个环境监测项目中遇到这个问题——传感器数据经常超过OLED屏幕的16字符显示限制&#xff0c;硬件滚动方案直接截断…...

嵌入式Linux实战:全志T3+vsftpd实现轻量级文件传输(含WinSCP连接教程)

嵌入式Linux实战&#xff1a;全志T3vsftpd实现轻量级文件传输&#xff08;含WinSCP连接教程&#xff09; 在物联网设备开发中&#xff0c;文件传输是一个看似简单却充满挑战的环节。当你的开发板是全志T3这样的资源受限平台时&#xff0c;如何在有限的存储和内存条件下搭建一个…...

收藏备用!小红书二面大模型面试题:Agent 基本架构核心组件详解(小白也能看懂)

很多程序员和大模型小白反馈&#xff0c;最近小红书二面被问到了一道高频题&#xff1a;「Agent 的基本架构由哪些核心组件构成&#xff1f;」&#xff0c;这道题看似基础&#xff0c;却能快速考察对 Agent 核心逻辑的理解&#xff0c;不管是面试还是日常学习都必须掌握。今天就…...

ESP8266 AT指令实战:用NodeMCU连接WiFi并发送HTTP请求(2023最新版)

ESP8266 AT指令实战&#xff1a;用NodeMCU连接WiFi并发送HTTP请求&#xff08;2023最新版&#xff09; 当你拿起一块NodeMCU开发板时&#xff0c;它可能看起来只是块普通的电路板&#xff0c;但内置的ESP8266芯片让它成为了物联网开发的瑞士军刀。不同于Arduino需要额外WiFi模块…...

CoPaw自动化办公实战:Python脚本批量处理文档与邮件

CoPaw自动化办公实战&#xff1a;Python脚本批量处理文档与邮件 1. 为什么需要办公自动化&#xff1f; 每天重复处理大量文档和邮件&#xff0c;是不是让你感到疲惫不堪&#xff1f;根据统计&#xff0c;普通职场人平均每天要花费2-3小时在文档处理和邮件回复上。这些重复性工…...