• Django 注册及创建订单商品


    注册功能的实现

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    user/urls

    from django.urls import path
    from .views import UserApiView
    
    urlpatterns = [
        path("",UserApiView.as_view()),
    ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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__"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    utils/password_encode.py

    import hashlib
    def get_md5(param):
        md5 = hashlib.md5()
        md5.update(param.encode())
        return md5.hexdigest()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    urls

    path("user/", include("user.urls")),
    
    • 1

    在这里插入图片描述

    用户个人中心获取 用户信息接口开发

    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("用户信息获取失败")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    订单逻辑梳理与表的创建

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    订单商品表(点击去结算)
    在这里插入图片描述

    订单表(提交订单)
    在这里插入图片描述
    数据库创建的表映射到本地模型类

    python manage.py inspectdb --database default goods > apps/order/models.py
    
    • 1

    基于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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    order/urls

    from django.contrib import admin
    from django.urls import path
    from .views import OrderGoodsGenericAPIView
    
    
    urlpatterns = [
        path("goods/",OrderGoodsGenericAPIView.as_view()),
    
    
    ]
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    order/serializers.py

    from rest_framework import serializers
    from apps.order.models import OrderGoods
    
    
    class OrderGoodsSerializer(serializers.ModelSerializer):
        class Meta:
            model = OrderGoods
            fields = "__all__"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    urls

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

    在这里插入图片描述

    基于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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

  • 相关阅读:
    京东大佬整理的亿级流量架构核心技术,助力智能时代,成就非凡
    C++ 配置VSCode开发环境
    Vue配置代理学习笔记
    Linux ubuntun 手动安装配置OpenJDK1.8
    分布式系统原理-副本与一致性
    CI868K01-eA 3BSE048845R2 106M1081-01
    stm32f103c6t6制作音乐频谱分析仪
    mysql用户管理和用户授权
    如何在公网环境下使用移动端通过群晖管家管理部署自己家里局域网内的黑群晖
    亚商投资顾问 早餐FM/1027新航季国际客运航班量840班
  • 原文地址:https://blog.csdn.net/weixin_47906106/article/details/133990462