【发布时间】: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