405上传文件时不允许的方法

时间:2016-05-09 06:53:05

标签: angularjs django post file-upload http-status-code-405

我有一个基于类的视图,其中定义了post方法,这是文件上传的终点。

请求是使用ng-file-upload模块进行的。

执行上传请求时,收到405 Method not allowed错误。

如果我尝试使用相同的参数(文件除外)对相同的URL进行POST,则表明它正常工作。

我可以在Firebug中看到响应标头不同:

  • 通过POST发送请求时,响应的允许方法是POST和OPTIONS
  • 通过上传发送时,它们是GET,HEAD和OPTIONS

导致这种情况的原因是什么?

[编辑] 根据要求,这是视图处理方法的(简化)代码:

def order_data(order, request):
    """
    Return a serialized order with added permission information
    """
    data = OrderSerializer(order).data

    # Add a few custom fields on the data dict

    return data

class SaveOrder(APIView):

    def post(self, request):
        data = request.data.get('order')

        if data.get('id', None) is not None:
            if not request.user.has_perm('orders.modify_order'):
                return HttpResponseForbidden()
            else:
                order = Order.objects.get(id=data['id'])
        else:
            if not request.user.has_perm('orders.create_order'):
                return HttpResponseForbidden()
            else:
                order = Order()

        # Fill in order using the fields in data

         order.save()

        return JsonResponse(order_data(order, request))

[edit2]实际上,这种行为并不完全是我之前所描述的:

  • 使用upload来定位/order/save-order我收到错误消息,说我需要一个尾随斜杠
  • 使用upload来定位/order/save-order/我得到了405
  • 使用post来提醒/order/save-order它的工作正常(原始代码)
  • 使用post来定位/order/save-order/我得到了404

1 个答案:

答案 0 :(得分:0)

原来我的请求实际上是针对2个不同的网址完成的,因此上传失败了。