2016-05-09 17 views
0

Ich habe eine klassenbasierte Ansicht mit einer definierten Methode post, die den Endpunkt eines Datei-Uploads darstellt.405 Methode beim Hochladen der Datei nicht zulässig

Die Anfrage wird mit dem Modul ng-file-upload gestellt.

Beim Ausführen der Upload-Anfrage erhalte ich einen 405 Method not allowed Fehler.

Wenn ich versuche, einen POST an dieselbe URL mit den gleichen Parametern (außer für die Datei) zu machen, funktioniert es gut.

Ich kann in Firebug sehen, dass die Antwort-Header sind unterschiedlich:

  • Wenn die Anforderung über POST senden, die erlaubt Methode Antwort sind POST und OPTIONS
  • Wenn per Upload zu senden, sind sie GET, HEAD und OPTIONEN

Was könnte das verursachen?

[Bearbeiten] Wie gewünscht, hier ist der (vereinfacht) Code der Ansicht Handhabung Methode:

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] Eigentlich ist das Verhalten nicht genau das, was ich beschrieben habe früher:

  • Mit upload/order/save-order url ich eine Fehlermeldung erhalten, dass ich einen Schrägstrich
  • Mit upload müssen /order/save-order/ url ich ein 405
  • Mit post/order/save-order url es in Ordnung (Original-Code)
  • Mit post arbeitet mit url /order/save-order/ Ich erhalte eine 404
+1

Können Sie den Code für die View-Funktion/Klasse, die diese Anfrage bearbeitet, veröffentlichen? – solarissmoke

Antwort

0

meine Anfragen stellte sich heraus, wurden tatsächlich getan 2 verschiedene URLs, damit das Hochladen Versagen.