代码之家  ›  专栏  ›  技术社区  ›  mdadil2019

允许在Django REST框架中发布请求

  •  0
  • mdadil2019  · 技术社区  · 8 年前

    我正在使用Django REST框架创建一个简单的RESTAPI。我通过向API发送get请求成功地得到了响应,但是由于我想发送post请求,因此django rest框架默认不允许post请求。

    如图(下图)所示,只允许GET、HEAD、选项,但不允许POST请求 enter image description here

    views.py中的get和post方法

    from django.shortcuts import render
    from rest_framework.views import APIView
    from rest_framework.response import Response
    from profiles_api import serializers
    from rest_framework import status
    # Create your views here.
    
    
    class HelloApiView(APIView):
        """Test APIView"""
    
        #Here we are telling django that the serializer class for this apiViewClass is serializer.HelloSerializer class
        serializer_class = serializers.HelloSerializer
    
        def get(self, request, format=None):
        """Retruns a list of APIViews features."""
    
        an_apiview = [
            'Uses HTTP methods as fucntion (get, post, patch, put, delete)',
            'It is similar to a traditional Django view',
            'Gives you the most of the control over your logic',
            'Is mapped manually to URLs'
        ]
    
        #The response must be as dictionary which will be shown in json as response
        return Response({'message': 'Hello!', 'an_apiview': an_apiview})
    
        def post(self,request):
            """Create a hello message with our name"""
    
            serializer = serializer.HelloSerializer(data=request.data)
    
            if serializer.is_valid():
                name = serializer.data.get('name')
                message = 'Hello! {0}'.format(name)
                return Response({'message':message})
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

    如何在django rest框架中允许post请求?

    1 回复  |  直到 8 年前
        1
  •  3
  •   JPG    8 年前

    代码的问题是,您添加了 def post() 之后 return 声明。

    要解决,只需更正 indentation 水平如下,

    class HelloApiView(APIView):
        def get(self, request, format=None):
            return Response()
    
        def post(self, request):
            return Response()