我的订单接口
在这节课中,我们将实现订单列表的功能。用户支付成功后,支付宝会跳转回指定页面,我们之前在settings.py中设置了返回地址。也就是
# returnURL
ALIPAY_RETURN_URL = '域名/orders/'
我们希望用户支付成功后直接跳转到订单列表页面,查看已购买的订单和订单的支付状态。
设置接口
首先我们需要设置一个URL来处理订单列表的请求。在urls.py中使用router.register()方法注册一个视图集,将其映射到orders路径上。
from trade import views as trade_views
router.register(r'orders', trade_views.OrderViewSet)
创建OrderViewSet
接下来,我们需要创建一个OrderViewSet类来处理订单相关的操作。在之前的views.py文件中创建一个新的类,并继承自ModelViewSet类。
from .serializers import CardSerializer, OrderSerializer
from utils.filters import OrderFilter
class OrderViewSet(viewsets.ModelViewSet):
queryset = Order.objects.order_by('-id')
serializer_class = OrderSerializer
filterset_class = OrderFilter
def get_permissions(self):
if self.request.method in SAFE_METHODS:
return [IsAuthenticated()]
else:
return [IsAdminUser()]
创建OrderSerializer
创建OrderSerializer, 代码如下:
class OrderSerializer(serializers.ModelSerializer):
card = CardSerializer()
class Meta:
model = Order
fields = ['id','order_sn', 'pay_status', 'order_mount', 'created_at', 'card']
创建filter
在dx_movie/utils/路径下,创建一个filters.py文件,将所有的Filter类都统一放到这个文件下。filters.py文件代码如下:
from django_filters import rest_framework as filters
from movie.models import Movie
from trade.models import Order
class MovieFilter(filters.FilterSet):
movie_name = filters.CharFilter(lookup_expr='icontains')
category_id = filters.NumberFilter()
region = filters.NumberFilter()
class Meta:
model = Movie
fields = ['movie_name', 'category_id', 'region']
class OrderFilter(filters.FilterSet):
pay_status = filters.CharFilter(field_name='pay_status')
order_sn = filters.CharFilter(field_name='order_sn')
class Meta:
model = Order
fields = ['order_sn', 'pay_status']
注意:将movie/views.py中的MovieFilter删除,导入utils.filters 。 修改后的代码如下:
from utils.filters import
class MovieViewSet(viewsets.ModelViewSet):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
filterset_class = MovieFilter
permission_classes = [IsAdminUserOrReadOnly]
查询订单
现在我们可以使用接口来查询订单列表。发送一个GET请求到/orders/路径,即可获取所有订单的列表。可以使用查询参数来过滤订单,比如根据订单状态或订单号进行查询。
发送请求示例(查询状态为paying的订单):
GET /orders/?pay_status=paying
运行效果如下图所示。

发送请求示例(根据订单号查询订单):
GET /orders/?page=2

结语
至此,我们已经完成了订单列表的接口实现。接下来,我们将继续实现前端展示这些数据的功能。在下节课中见!
【大熊课堂精品课程】
Python零基础入门动画课: https://www.bilibili.com/cheese/play/ss7988
Django+Vue:全栈开发: https://www.bilibili.com/cheese/play/ss8134
PyQT6开发桌面软件: https://www.bilibili.com/cheese/play/ss12314
Python办公自动化: https://www.bilibili.com/cheese/play/ss14990
Cursor AI编程+MCP:零基础实战项目课: https://www.bilibili.com/cheese/play/ss105194189
Pandas数据分析实战: https://www.bilibili.com/cheese/play/ss734522035
AI大模型+Python小白应用实战: https://www.bilibili.com/cheese/play/ss3844