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

发布于:2024-04-03 ⋅ 阅读:(110) ⋅ 点赞:(0)

在之前的写过的接口中,我先后用了基于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 ResponseMessage


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

urlpatterns = [
    # path('list/', views.OrderListGenericAPIView.as_view(), name='order_list'),
    path('list/<int:user>/<int:status>', views.OrderListGenericAPIView.as_view(), name='order_detail')
]

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


网站公告

今日签到

点亮在社区的每一天
去签到