2016-04-09 11 views
0

Sınıf temelli API görünümü django yöntem ve implemneting sınıf temelli görüş ve örnek bir örnek i Çağrı spesifik i DRF için yeni

@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) 

denedi bu benim ürün apis için bu sınıf, ama öyleyim i get_user_products veya get_seller_products Şu anda ben bu sınıf infaz ve yazdırır GET yöntemi olarak bu http://localhost:8000/products

gibi bu api çağırdığınızda

vurabilir nasıl ben "gibi, ilgili sonuca ulaşmak için bireysel yöntemler nasıl erişebileceğini emin içinde Gördüğünüz s, ama nasıl i Burada

içindeki yöntemleri diyorsunuz Sen sınıf tabanlı görüşlerini süslemek için api_view dekoratör kullanmak gerekmiyor

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"), 
] 
+0

('request.DATA' var olmayan Bir süre), yükseltmeyi ve bunu 'request.data' olarak değiştirmenizi şiddetle tavsiye ederim. –

cevap

2

bu uygulama için url.py olduğunu ; işlev tabanlı görünümler ile api_view kullanın. Eğer örnekteki gibi, sınıf tabanlı bir görünümünü kullanmak istiyorsanız

, print ifadeyi kaldırmak ve api_view dekoratör ve gösterildiği gibi, görünüm ithal ve ProductList.as_view() kullanarak urlconf görünümü dahil the tutorial. Ayrıca

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 içinde görüşlerinizi ithalat yollarını içeren dizeleri kullanılarak kullanım dışı olduğunu akılda tutmak ve bunun için destek yaklaşan sürümünde kaldırılacak: Senin durumunda urlconf aşağıdaki gibi görünebilir Django. Bunun yerine, urlconf içerideki bütün görüşlerini aktarabilir ve örneğin doğrudan görünüm işlevlerini kullanın:

Eğer DRF çok eski bir sürümünü kullanıyor olabilir gibi görünüyor
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"), 
] 
+0

değişiklikleri yaptı, ama şimdi GET'e izin vermiyor, aynı zamanda sınıftaki çeşitli işlevlere nasıl erişebileceğimi ve bunun için apis ne olacağını açıklayabilir misiniz? – user29578

+1

GET, görünümünüz tarafından desteklenmiyor, çünkü bu sınıfta 'get' yöntemini uygulamadınız. Diğer sorunuza gelince, bir Python dil eğitimi almanızı tavsiye ederim. – koniiiik