django中def不起作用

发布于 2022-09-07 23:52:08 字数 1079 浏览 28 评论 0

我定义了一个类,里面有一个get方法,当用户用get方法发送请求时,会执行这个方法(主要就是从数据可里面取出数据,然后进行一些修改再发给前端)。可是我试了一下,当用户发起get请求时,只会执行

queryset = Product.objects.all()
serializer_class = ProductSerializer

get的方法都没有执行,请问是怎么回事

## urls.py
router.register(r'getList', ProductListViewset)
## views.py

class ProductListViewset(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    def get(self, request, format=None):
        serializer = ProductSerializer
        data = serializer.data
        username = data.get('user_name')
        user = User.objects.get(username__exact=username)
        new_data = {
            'id': data.get('id'),
            'user_name': data.get('user_name'),
            'user_image_URL': user.get('user_image_URL'),
            'c_time': data.get('c_time'),
            'goods_price': data.get('goods_price'),
            'title': data.get('title'),
            'description': data.get('description')
        }
        return Response(new_data, 200)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

给我一枪 2022-09-14 23:52:08

这个你要详细看一下 restfulframework的框架文档。

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

在modelviewset中已经封装好了各种http请求方法所对应的action的匹配,
而具体的匹配的规则就定义在routers模块的SimpleRouter类中

class SimpleRouter(BaseRouter):

    routes = [
        # List route.
        Route(
            url=r'^{prefix}{trailing_slash}

所以说回到你的问题,其实框架已经默认提供了路由以及action,你要做的是覆盖mixin中的方法来实现自定义(也就是自己的业务逻辑)

router = SimpleRouter()
router.register('product', ProductViewset)
# 这里注册了ProductViewset,会默认添加所有的restful路由
# 所以你的viewset里应该是 def list()
# 这个是默认ListModelMixin的list方法,你可以学习一下他的写法

class ListModelMixin(object):
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

另外,从上面的code来看,
我觉得你对restfulframework并没有理解,
我建议你跟着官网上的例子,逐步学习,学习过程中问题再提出来,大家一起看。
https://www.django-rest-frame...

, mapping={ 'get': 'list', 'post': 'create' }, name='{basename}-list', detail=False, initkwargs={'suffix': 'List'} ), # Dynamically generated list routes. Generated using # @action(detail=False) decorator on methods of the viewset. DynamicRoute( url=r'^{prefix}/{url_path}{trailing_slash}

所以说回到你的问题,其实框架已经默认提供了路由以及action,你要做的是覆盖mixin中的方法来实现自定义(也就是自己的业务逻辑)


另外,从上面的code来看,
我觉得你对restfulframework并没有理解,
我建议你跟着官网上的例子,逐步学习,学习过程中问题再提出来,大家一起看。
https://www.django-rest-frame...

, name='{basename}-{url_name}', detail=False, initkwargs={} ), # Detail route. Route( url=r'^{prefix}/{lookup}{trailing_slash}

所以说回到你的问题,其实框架已经默认提供了路由以及action,你要做的是覆盖mixin中的方法来实现自定义(也就是自己的业务逻辑)


另外,从上面的code来看,
我觉得你对restfulframework并没有理解,
我建议你跟着官网上的例子,逐步学习,学习过程中问题再提出来,大家一起看。
https://www.django-rest-frame...

, mapping={ 'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy' }, name='{basename}-detail', detail=True, initkwargs={'suffix': 'Instance'} ), # Dynamically generated detail routes. Generated using # @action(detail=True) decorator on methods of the viewset. DynamicRoute( url=r'^{prefix}/{lookup}/{url_path}{trailing_slash}

所以说回到你的问题,其实框架已经默认提供了路由以及action,你要做的是覆盖mixin中的方法来实现自定义(也就是自己的业务逻辑)


另外,从上面的code来看,
我觉得你对restfulframework并没有理解,
我建议你跟着官网上的例子,逐步学习,学习过程中问题再提出来,大家一起看。
https://www.django-rest-frame...

, name='{basename}-{url_name}', detail=True, initkwargs={} ), ]

所以说回到你的问题,其实框架已经默认提供了路由以及action,你要做的是覆盖mixin中的方法来实现自定义(也就是自己的业务逻辑)

另外,从上面的code来看,
我觉得你对restfulframework并没有理解,
我建议你跟着官网上的例子,逐步学习,学习过程中问题再提出来,大家一起看。
https://www.django-rest-frame...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文