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

京西商城——创建订单和获取订单接口

在之前的写过的接口中,我先后用了基于View和APIView来编写视图类

基于APIView类的时候相对于View会有很多便捷,但其实drf还在APIView的基础上又封装了一个 GenericAPIView 类,会大大减少了在编写视图时的重复代码和在修改代码时的工作量。

GenericAPIView 允许你通过 querysetserializer_class 属性来指定视图操作的数据集和序列化器。以便于在修改代码时不必要整篇修改。

lookup_fieldlookup_url_kwarg 属性,使得可以自定义如何通过 URL 参数来查找特定的模型实例。这为细节视图提供了灵活的查找机制。

order/views.py
from rest_framework.generics import GenericAPIView
from apps.order.models import Order
from apps.order.serializers import OrderSerializer
from utils import ResponseMessageclass OrderListGenericAPIView(GenericAPIView):serializer_class = OrderSerializer  # 指定序列化器类queryset = Order.objects.all()  # 获取查询集lookup_fields = ['user']  # 告诉Drf在URL里用什么关键词来找到对应的数据记录(get请求)def post(self, request, *args, **kwargs):# print(self.get_queryset())# print(self.get_serializer())data = request.data# print(data)order = self.get_serializer(data=data)if order.is_valid(raise_exception=True):# print(order.data)order.save()return ResponseMessage.OrderResponse.success(order.data)else:return ResponseMessage.OrderResponse.failed(order.errors)def get(self, request, user):# print(user)# 查询数据库所有数据# return ResponseMessage.OrderResponse.success(self.get_serializer(instance=self.get_queryset(), many=True).data)orders = self.get_serializer(instance=self.get_queryset().filter(user=user), many=True)return ResponseMessage.OrderResponse.success(orders.data)
order/urls.py
from django.urls import path
from apps.order import viewsurlpatterns = [# path('list/', views.OrderListGenericAPIView.as_view(), name='order_list'),path('list/<int:user>/<int:status>', views.OrderListGenericAPIView.as_view(), name='order_detail')
]

若有错误与不足请指出,关注DPT一起进步吧!!!

http://www.lryc.cn/news/330371.html

相关文章:

  • 大话设计模式之模板方法模式
  • 新model开发记录
  • ARMday1
  • 【C++风云录】创造视觉奇迹:探索C++图形编程的魅力与可能性
  • 常见的Nginx+Redis+MQ+DB架构设计
  • vue+elementUI搭建动态表头的表格
  • 【ENSP】交换机和交换机之间实现静态路由
  • 2024.2.18力扣每日一题——N叉树的前序遍历
  • Taro活动列表中,对某一个活动添加分享按钮
  • 深入理解计算机系统 家庭作业 2.65
  • Java字节码
  • 深入解析大数据体系中的ETL工作原理及常见组件
  • 条件变量的简易C++实现版
  • 目标检测评价标准
  • C51-- 蓝牙,WIFI模块
  • HN热帖|替换Redis的一场赛跑
  • Kubernetes(k8s):网络插件之Calico安装与详解
  • Chrome base 库详解:工具类和常用类库
  • Nginx开发实战三:替换请求资源中的固定数据
  • 如何在Python中实现多线程和多进程?
  • Redis面试题10道
  • vue3从精通到入门6:v-memo指令
  • 【算法集训】基础算法:双指针
  • 李白打酒加强版(c++实现)
  • 平价运动蓝牙耳机哪个品牌好?必选的5个爆款品牌,超高性价比!
  • Android ImageView以及实现截图
  • 剑指offer--数组中重复的数字
  • 【THM】SQL Injection(SQL注入)-初级渗透测试
  • 数码论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)
  • vue3性能提升主要通过哪几方面?