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可能就像参观世界上最大的糖果店:你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
