首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在基于类的api视图中调用特定方法django

在基于类的api视图中调用特定方法django
EN

Stack Overflow用户
提问于 2016-04-09 11:32:43
回答 1查看 4.4K关注 0票数 0

我是DRF的新手,并且实现了基于类的视图,其中一个示例是我尝试过的。

代码语言:javascript
运行
复制
@api_view(['GET', 'POST'])
class ProductList(APIView):
    print "inside"

    def get_user_products(self, request, user_id, format=None):
        products = Product.objects.all(user_id=user_id)
        serializer = ProductSerializer(products, many=True)
        return Response(serializer.data)

    def get_seller_products(self, request, seller_id, format=None):
        products = Product.objects.filter(seller_id=seller_id)
        serializer = ProductSerializer(products, many=True)
        return Response(serializer.data)

    def post(self, request, user_id, seller_id, format=None):
        serializer = ProductSerializer(data=request.DATA, context={'request':request})
        if serializer.is_valid():
            serializer.object.user = User.objects.get(id=user_id)
            serializer.object.seller = Seller.objects.get(id=seller_id)
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我为我的产品api创建了这个类,但我不确定如何访问单个方法来访问相应的结果,比如如何访问get_user_products或get_seller_products。

现在,当我把这个api称为http://localhost:8000/products

作为GET方法,这个类执行并打印" inside“,如您所见,但是如何调用其中的方法?

这是这个应用程序的url.py

代码语言:javascript
运行
复制
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^login$', 'userapp.views.login_user', name="login"),
    url(r'^products$', 'productapp.views.ProductList', name="product-list"),
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-09 12:23:43

您不应该使用api_view装饰器来装饰基于类的视图;您应该在基于函数的视图中使用api_view

如果要使用基于类的视图(如示例中的视图),请删除print语句和api_view装饰器,并通过导入视图并使用ProductList.as_view()将视图包括在urlconf中,如本教程所示。在您的例子中,urlconf可能如下所示:

代码语言:javascript
运行
复制
from productapp.views import ProductList

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^login$', 'userapp.views.login_user', name="login"),
    url(r'^products$', ProductList.as_view(), name="product-list"),
]

另外,请记住,对于urlpatterns中的视图使用包含导入路径的字符串是不可取的,对此的支持将在Django的下一个版本中删除。相反,导入urlconf中的所有视图,并直接使用视图函数,例如:

代码语言:javascript
运行
复制
from productapp.views import ProductList
from userapp.views import login_user

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^login$', login_user, name="login"),
    url(r'^products$', ProductList.as_view(), name="product-list"),
]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36516177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档