Django中的HTTP 405方法不允许错误

时间:2017-07-31 19:50:53

标签: django django-forms django-views django-rest-framework

我有一个名为calculator.py的文件,其中有一个名为calc()的函数,它有一个名为calculate的方法:calculator.py

class calc():

    @classmethod
    def calculate(request_data):
        # start = time.time()

        results = {}
        a = 1

        return a

我需要在视图中给出一个POST请求,py并且应该在POST请求中的calculator.py中显示变量a(即1)。以下是我的views.py

的屏幕截图
from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.clickjacking import xframe_options_exempt
from rest_framework.decorators import api_view
from rest_framework.renderers import JSONRenderer

from rest_framework.response import Response

from calculator import calc

import json

# local variables
debug = True


@xframe_options_exempt
@csrf_exempt
@api_view(['POST'])
def calculated(request):
    report_table = calc.calculate(data=request.data)

    return JsonResponse(report_table.data, status=status.HTTP_201_CREATED)
    #return JsonResponse({"data":report_table.data})

但是当我运行此程序并检查POST请求的API端点时,它显示以下错误..! API End point result

GET /api/calculated
HTTP 405 Method Not Allowed
Allow: OPTIONS, POST
Content-Type: application/json
Vary: Accept

{
    "detail": "Method \"GET\" not allowed."
}

有人可以帮助我,为什么我会收到此错误。这段代码有什么问题吗? 我想要值'1',即在calculate.py中返回以显示在API端点中。有人可以帮我弄这个吗..!?如果我使用任何错误的条款,请原谅我,因为我是Django框架的新手。感谢。

2 个答案:

答案 0 :(得分:1)

试试吧

@api_view(['POST', 'GET'])
#                   ^^^^

或发帖请求

更多详情api_view

答案 1 :(得分:0)

当你加载页面时,你正在有效地发出GET请求,你可以放弃卷曲,例如尝试:

curl -i -XPOST http://container_ip:container_port/api/calculated

通常,POST请求旨在用于更改服务器上资源的状态,因此,如果您唯一需要做的就是检索数据,那么GET更合适