Django REST framework - «Метод \" GET \ "не разрешен». - - PullRequest
0 голосов
/ 16 июня 2020

При создании Django REST framework я получу все данные с помощью этого кода

views.py

@api_view(['GET', ])
def api_detail_educationlevel(request):
    if request.method == 'GET':
        educationlevel = EducationLevel.objects.all()
        serializer = EducationLevelSerializer(educationlevel, many=True)
        return Response(serializer.data)

urls.py

path('api/', views.api_detail_educationlevel),

но когда я добавляю в свой views.py вот так

@api_view(['PUT', ])
def api_update_educationlevel(request, pk):

    try:
        educationlevel = EducationLevel.objects.get(pk=pk)
    except EducationLevel.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'PUT':
        serializer = EducationLevelSerializer(educationlevel, data=request.data)
        data = {}
        if serializer.is_valid():
          serializer.save()
          data["success"] = "update successfull"
          return Response(data=data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


@api_view(['DELETE', ])
def api_delete_educationlevel(request, pk):

    try:
        educationlevel = EducationLevel.objects.get(pk=pk)
    except EducationLevel.DoesNotExist:
        return HttpResponse(status=404)

    if request.method == 'DELETE':
        operation = educationlevel.delete()
        data ={}
        if operation:
          data["success"] = "delete successfull"
        else:
          data["failure"] = "delete failed"
        return Response(data=data)

@api_view(['POST', ])
def api_create_blog_view(request):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated]

    def get(self, request, format=None):
        content = {
            'user': unicode(request.user),  # `django.contrib.auth.User` instance.
            'auth': unicode(request.auth),  # None
        }
        return Response(content)

и в свой urls.py

urlpatterns = [
  path('api/', views.api_detail_educationlevel),
  path('api/update/', views.api_update_educationlevel),
  path('api/delete/', views.api_delete_educationlevel),
  path('api/create/', views.api_create_blog_view),
]
urlpatterns = format_suffix_patterns(urlpatterns)

Я не знаю, почему я получаю это сообщение,

в моем пути ('api / update /', views.api_update_educationlevel),

enter image description here

в моем путь ('api / delete /', views.api_delete_educationlevel),

enter image description here

в моем пути ('api / create / ', views.api_create_blog_view),

enter image description here

есть идеи, почему я получаю это сообщение? Мне просто нужна функциональная структура отдыха, которая может обновлять / удалять / вставлять данные с использованием учетной записи аутентификации пользователя

1 Ответ

1 голос
/ 16 июня 2020

Для каждого из этих представлений (views.api_detail_educationlevel, views.api_update_educationlevel, views.api_delete_educationlevel, views.api_create_blog_view) вы определяете @api_view(['*api method*', ]).

Только views.api_detail_educationlevel имеет @api_view(['GET', ]), что позволяет использовать метод GET. Остальные нет. Либо добавьте метод GET к другим представлениям, либо, как в документации , которой вы следуете, создайте класс, содержащий каждый метод.

...