Django后端开发入门-Task05

本文是根据 datawhale 开源 Django后端开发入门 做的笔记

Task05:DefaultRouter、自定义函数

任务说明

代码编写

1、自定义函数

views.py

from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action

class GoodsCategoryViewSet(ModelViewSet):
    # 指定查询集(用到的数据)
    queryset = GoodsCategory.objects.all()
    # 指定查询集用到的序列化容器
    serializer_class = GoodsCategorySerializer

    @action(detail=False, methods=['get'])
    def latest(self, request):
        latest_obj = GoodsCategory.objects.latest('id')
        print(latest_obj)
        # 对创建的对象进行序列化,并作为响应返回
        serializer = GoodsCategorySerializer(instance=latest_obj)
        return Response("hello 你调用了自定义函数latest")

@action 是 Django REST framework 中的一个装饰器,用于将自定义函数转换为视图集的一个动作。@action 装饰器提供了一种定义自定义函数的方式,这些函数并不直接对应于标准的 CRUD 操作(Create-Read-Update-Delete),而是实现一些其他的自定义行为或业务逻辑。

其中,detail=False 表示该动作不需要处理单个对象,而是处理整个集合;

被 @action 装饰的函数需要作为方法定义在视图集类中,并且在使用 router.register() 注册视图集时,需要指定 basename 参数,以确保该动作的 URL 能够正确映射到视图集。

在GoodsCategoryViewSet中新增自定义函数latest,查询最近新增的商品分类数据。

2、路由组件

DefaultRouter是Django REST framework中提供的一个路由器类,用于自动生成URL路由。

路由器是将URL与视图函数或视图集关联起来的一种机制。Django REST framework的路由器通过简单的配置可以自动生成标准的URL路由,从而减少了手动编写URL路由的工作量。

urls.py

from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'GoodsCategoryViewSet', GoodsCategoryViewSet)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('filtergoodscategory/', FilterGoodsCategory),
    path('insertgoodscategory/', InsertGoodsCategory),
    path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),
    path('getgoods/', GetGoods.as_view()),
    # path('latest/', GoodsCategoryViewSet.as_view({"get":"latest"}))
]

urlpatterns += router.urls

测试用例

1、切换到对应的虚拟环境,启动服务器 。

2、在Paw中,输入测试接口url:http://127.0.0.1:8000/GoodsCategoryViewSet/latest/

以get请求提交,结果如下:

 服务器输出最近添加的GoodsCategory信息如下:

 

 

其实,上述方法,相当于在url path中新增一条latest函数方法的映射。如下代码也能起到相同的效果:

urls.py

from django.contrib import admin
from django.urls import path
from erp.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('filtergoodscategory/', FilterGoodsCategory),
    path('insertgoodscategory/', InsertGoodsCategory),
    path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),
    path('getgoods/', GetGoods.as_view()),
    path('latest/', GoodsCategoryViewSet.as_view({"get":"latest"}))
]

测试结果如下:

 

遇到问题及解决方法:

暂无 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值