2015-12-17 6 views
1

Хорошо, у меня есть GenericAPIView, который должен сформировать форму в BROWSABLE API потому что объявляет post метод:Django REST Framework не создает форму в BROWSABLE API

from rest_framework import status 
from rest_framework.generics import GenericAPIView 
from rest_framework.response import Response 

from transacciones.serializers import BillSerializer 


class ProcessBill(GenericAPIView): 

    serializer_class = BillSerializer 

    def post(self, request): 

     recieved_data = request.data 

     print(recieved_data) 

     return Response("Processed Bill", status=status.HTTP_200_OK) 

Но это не создает форма. Вид выглядит следующим образом (это на испанском языке, я перевел код на английский, так что более комфортный для чтения):

enter image description here

Я понимаю, что я получаю 405 Method not Allowed, потому что я не определяю get метод, только post.

Im, использующий Django 1.8, Django REST Framework 3.3.1 и python 3.4. Я здесь потерялся. Есть идеи?

EDIT

Кроме того, если я использую Почтальон (Chrome добавить в) вид реагирует правильно.

+1

Возможный дубликат [Django Rest Framework, как публиковать данные по API-интерфейсу для просмотра) (http://stackoverflow.com/questions/34342280/django-rest-framework-how-to-post-data-on-the- browsable-api) – Geotob

+0

@Geotob Этот вопрос использует «GenericAPIView», старый использует «APIView». Разница указана в ответе на этот вопрос от TomChristie: http://stackoverflow.com/questions/14616489/django-rest-framework-autogenerate-form-in-browsable-api – alejoss

+0

Так или иначе, я думал, что это может быть хорошая идея чтобы создать новый вопрос, может быть, это была не очень хорошая идея. Я мог бы удалить один из них. – alejoss

ответ

1

Вы можете использовать этот

from rest_framework.generics import CreateAPIView 
from rest_framework.mixins import CreateModelMixin 
from rest_framework.response import Response 

from transacciones.serializers import BillSerializer 


class ProcessBill(CreateModelMixin, GenericAPIView): 
    serializer_class = BillSerializer 

    def post(self, request, *args, **kwargs): 
     return self.create(request, *args, **kwargs) 

    def create(self, request, *args, **kwargs): 
     # Do whatever you want here 

     # Then invoke the create method and create your instance 
     return super().create(request, *args, **kwargs) 

Или в качестве альтернативы, вы просто наследовать от CreateAPIView, который делает по существу такой же, как выше :)

+0

Спасибо за ответ. Это не работает.:/ – alejoss

+0

hm yea @alejoss Я не заметил, что дженерикам нужен метод 'post' .. слишком привык к просмотрам. узнал что-то новое :) see редактирование выше, отлично работает для меня – Geotob

1

код Если вы используете generics.RetrieveUpdateDestroyAPIView, то вы должны define_classes, которые могут быть обычными.

class ObjectDetail(generics.RetrieveUpdateDestroyAPIView): 
    """ 
    Object RUD (Read Update Delete) API 
    """ 
    permission_classes = (checkUserPermission,) 
    queryset = Object.objects.all() 
    serializer_class = ObjectSerializer 

ИЛИ Если вы хотите просто проверить это, используйте permission_classes = (AllowAny,)

class ObjectDetail(generics.RetrieveUpdateDestroyAPIView): 
    """ 
    Object RUD (Read Update Delete) API 
    """ 
    permission_classes = (AllowAny,) 
    queryset = Object.objects.all() 
    serializer_class = ObjectSerializer 
0

Я была такая же проблема, с почтальоном, я увидел, что это был мандат вопрос, поэтому изменение текущего статуса пользователя для персонала решен проблема.

Смежные вопросы