扬州做阿里巴巴的公司网站中国十大经典广告
在之前的写过的接口中,我先后用了基于View和APIView来编写视图类
基于APIView类的时候相对于View会有很多便捷,但其实drf还在APIView的基础上又封装了一个 GenericAPIView 类,会大大减少了在编写视图时的重复代码和在修改代码时的工作量。
GenericAPIView
允许你通过queryset
和serializer_class
属性来指定视图操作的数据集和序列化器。以便于在修改代码时不必要整篇修改。
lookup_field
和lookup_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一起进步吧!!!