我是DRF的新手,并且实现了基于类的视图,其中一个示例是我尝试过的。
@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
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"),
]
发布于 2016-04-09 04:23:43
您不应该使用api_view
装饰器来装饰基于类的视图;您应该在基于函数的视图中使用api_view
。
如果要使用基于类的视图(如示例中的视图),请删除print
语句和api_view
装饰器,并通过导入视图并使用ProductList.as_view()
将视图包括在urlconf中,如本教程所示。在您的例子中,urlconf可能如下所示:
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中的所有视图,并直接使用视图函数,例如:
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"),
]
https://stackoverflow.com/questions/36516177
复制