Django 注册及创建订单商品

news2024/10/5 16:23:10

注册功能的实现

user/views

from rest_framework.generics import GenericAPIView
from rest_framework.views import APIView

from 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 UserApiView

urlpatterns = [
    path("",UserApiView.as_view()),
]

user/serializers.py

import datetime

from rest_framework import serializers
from rest_framework.validators import UniqueValidator

from apps.user.models import User
from utils.password_encode import get_md5


class 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 result

    class Meta:
        model = User
        fields = "__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 OrderGoodsSerializer


class OrderGoodsGenericAPIView(GenericAPIView):
    queryset = OrderGoods.objects
    serializer_class = OrderGoodsSerializer

    def 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传data
        ser = 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 OrderGoodsGenericAPIView


urlpatterns = [
    path("goods/",OrderGoodsGenericAPIView.as_view()),


]


order/serializers.py

from rest_framework import serializers
from apps.order.models import OrderGoods


class OrderGoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = OrderGoods
        fields = "__all__"

from django.db import models


class 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 = False
        db_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 = False
        db_table = 'order_goods'

urls

path("order/", include("order.urls")),

在这里插入图片描述

基于GenericAPIView视图调用逻辑实现获取订单商品接口开发

order/view.py

class OrderGoodsGenericAPIView(GenericAPIView):
    queryset = OrderGoods.objects
    serializer_class = OrderGoodsSerializer

    def post(self, request):
        print(request.data)
        # request.data 类型是 dict   转成object传data
        ser = 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)

在这里插入图片描述

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

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

相关文章

Unity OnGUI调试工具

背景 在产品开发过程中调试数据是必不可少的过程之一,那么涉及到频繁的设置数据、运行unity等一系列繁琐的操作,有没有更好的办法呢?答案是肯定有更好的办法。这里我所用到的是unity自带的OnGUI相关的工具可以实时的更改数据调试。 代码 usi…

有没有人声和背景音乐分离的神器?

做视频剪辑,二次创作的朋友,需要去除视频中的背景音乐,保留人声;或者去除人声,保留背景音乐。随着用户需求的增多,科技的发展,让我们能通过智能的人声分离软件来实现,下面就来看看如…

基于AT89C51+DS1302+LCD1602的实时时钟proteus仿真设计

一、DS1302简介: DS1302 可慢速充电实时时钟芯片包含实时时钟/日历和 31 字节的非易失性静态 RAM。它经过一个简 单的串行接口与微处理器通信。实时时钟/日历可对秒,分,时,日,周,月,和年进行计数…

无人驾驶智能改造机场“人货场”

机场作为国家的门户,承载着众多旅客与货物的流动,其运行效率直接关系到整个国家的发展和繁荣。随着科技的进步,无人驾驶技术日益成熟,智能交通革新将成为现实,将其应用于机场会为我们带来更加便捷、高效的出行体验&…

【Javascript】数组练习(在排好序的数组⾥,按照⼤⼩顺序插⼊数据)

var array[1,4,5,7,9,17]; console.log(array);比如要插入一个数16 var array[1,4,5,7,9,17];var num16; var indexnull; var i; for(i0;i<array.length;i){if(array[i]<num){indexi;} } console.log(index);首先通过循环找出最后一个比自定义的num小的值&#xff0c;并…

Vue.js中的高级概念:渲染函数和渲染无内容组件的深度探讨

文章目录 前言渲染函数&#xff08;Render Functions&#xff09;示例使用场景渲染无内容组件&#xff08;Renderless Components&#xff09;示例使用场景总结 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人…

基于springboot实现地方废物回收机构平台管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现地方废物回收机构平台管理系统演示 摘要 网络的广泛应用给生活带来了十分的便利。所以把地方废物回收机构管理与现在网络相结合&#xff0c;利用java技术建设地方废物回收机构管理系统&#xff0c;实现地方废物回收机构的信息化。则对于进一步提高地方废物回…

腾讯云优惠券免费领取入口整理分享

腾讯云作为国内领先的云服务提供商&#xff0c;为了回馈用户的支持和信任&#xff0c;经常推出各种优惠活动&#xff0c;并提供优惠券供用户使用。本文将整理和分享腾讯云优惠券的免费领取入口&#xff0c;帮助用户在购买腾讯云产品时享受更多的优惠和福利。 一、腾讯云优惠券介…

VPN(虚拟专用网)攻略大全,你一定会用到!

你们好&#xff0c;我的网工朋友。 今天想和你聊聊VPN。 在VPN出现之前&#xff0c;企业分支之间的数据传输只能依靠现有物理网络&#xff08;例如Internet&#xff09;。 但由于Internet中存在多种不安全因素&#xff0c;报文容易被网络中的黑客窃取或篡改&#xff0c;最终…

wordpress搬家后,更改固定链接404文章无法打开,找不到网页与解决办法

出现这个问题的原因可能是服务没有设置伪静态设置&#xff0c;需要配置nginx服务器或者apach服务器 1.问题描述 WordPress中修改固定链接&#xff0c;如下。 保存后再打开网页出现类似于如下404错误。 2.解决办法 打开Nginx的配置文件(如果你没有自己写过那就是默认的nginx.…

JAVA毕业设计101—基于Java+Springboot的电影购票微信小程序带后台管理(源码+数据库)

基于JavaSpringboot的电影购票微信小程序带后台管理(源码数据库)101 一、系统介绍 本系统是小程序前台&#xff0c;带后台管理 本系统分为管理员、用户两种角色 管理员功能&#xff1a; 登录、统计分析、密码修改、用户管理、广告管理、影院管理、分类管理、电影管理、场次…

找不到vcruntime140.dll,无法继续执行代码的详细解决方案

找不到vcruntime140.dll,无法继续执行代码&#xff1f;遇到这种问题&#xff0c;你知道要怎么去解决么&#xff1f;其实在我们开始讨论解决方案之前&#xff0c;需要首先了解什么是vcruntime140.dll文件。它是由Microsoft公司开发的一种DLL&#xff08;动态链接库&#xff09;文…

ExoPlayer架构详解与源码分析(6)——MediaPeriod

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

Dynamic DataSource 多数据源配置【 Springboot + DataSource + MyBatis Plus + Druid】

一、前言 MybatisPlus多数据源配置主要解决的是多数据库连接和切换的问题。在一些大型应用中&#xff0c;由于数据量的增长或者业务模块的增多&#xff0c;可能需要访问多个数据库。这时&#xff0c;就需要配置多个数据源。 二、Springboot MyBatis Plus 数据源配置 2.1、单数…

K8S集群实践之九: Ceph

Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments.1. 说明 因香橙派和树莓派资源所限&#xff0c;转移到基于VirtualBox建立的VMs继续实践…

YOLO目标检测——密集人群人头检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;在公共场所&#xff0c;如车站、商场、景区等&#xff0c;可以通过人头目标检测技术来监测人群流量数据集说明&#xff1a;人头检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注…

Android组件化实现,理解吸收

什么是组件化&#xff1f; 一个大型APP版本一定会不断的迭代&#xff0c;APP里的功能也会随之增加&#xff0c;项目的业务也会变的越来越复杂&#xff0c;这样导致项目代码也变的越来越多&#xff0c;开发效率也会随之下降。并且单一工程下代码耦合严重&#xff0c;每修改一处…

C++:多态的内容和底层原理

文章目录 多态的概念多态的定义虚函数override和final关键字重载、覆盖、隐藏 抽象类抽象类的定义接口继承和实现继承 多态的原理解析虚函数表 本篇总结C中多态的基本内容和原理实现和一些边角内容 多态的概念 首先要清楚多态是什么&#xff0c;是用来做什么的&#xff1f; …

Windows桌面便笺 - 置顶任务TODO - 便利贴工具

效果图 一直置顶 免费 步骤 1. 打开便笺 win10找不到自带的便签怎么办-百度经验win10找不到自带的便签怎么办,很多朋友都在问wi10找不到自带的便签怎么办&#xff0c;今天就来给大家介绍一下wi10找不到自带的便签怎么办的方法。https://jingyan.baidu.com/article/b2c186c8…

小红书品牌账号怎么运营,如何传播规划?

其实新品牌面对的肯定都是新客户&#xff0c;对于新客户来说&#xff0c;真诚永远是最大的必杀技&#xff0c;所以在这告诉各位新兴品牌&#xff0c;少点套路&#xff0c;那么小红书品牌账号怎么运营&#xff0c;如何传播规划呢&#xff1f; 一、对品牌账号进行定位 定位方面一…