【问题标题】:405 Method not allowed when uploading file405 上传文件时方法不允许
【发布时间】:2016-09-03 17:08:46
【问题描述】:

我有一个基于类的视图,其中定义了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 到 url /order/save-order 我收到一条错误消息,提示我需要一个斜杠
  • upload 到 url /order/save-order/ 我得到一个 405
  • 使用 post 到 url /order/save-order 它工作正常(原始代码)
  • post 到 url /order/save-order/ 我得到一个 404

【问题讨论】:

  • 你能发布处理这个请求的视图函数/类的代码吗?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2021-08-07
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多