2009-03-04 5 views
5

Hat jemand irgendwelche einfachen Codebeispiele für Django + SWFUpload? Ich habe es perfekt in meiner PHP-Anwendung funktioniert, aber Django gibt mir Kopfschmerzen.Codebeispiele für Django + SWFUpload?

+2

-1: kein Code. -1: Kein Fehler Traceback oder andere Nachrichten. –

Antwort

17

Leider kann ich Ihnen keine sehr detaillierten Codebeispiele geben, aber ich habe ziemlich viel Erfahrung in der Arbeit mit SWFUpload + Django (für eine Foto-Sharing-Site, an der ich arbeite). Wie auch immer, hier sind ein paar Hinweise, die hoffentlich für DjSWF Glück auf Ihrer Suche :)

  1. Sie wollen helfen werden die Cookies-Plugin verwenden (wenn natürlich Sie irgendeine Art von sitzungsbasierte Authentifizierung verwenden [wie django.contrib.auth, und kümmern, wer was hochgeladen hat).

    Die Cookies Plugin sendet die Daten von Cookies als POST, so dass Sie einen Weg, dies zu, wieder in request.COOKIES (process_request Middleware finden müssen, die für eine settings.SESSION_COOKIE_NAME in request.POST auf bestimmte URLs aussieht und gibt sie in request.COOKIES funktioniert gut für dieses :)

  2. Denken Sie auch daran, dass Sie müssen etwas zurück in den Antworttextkörper für SWFUpload, um es als einen erfolgreichen Upload-Versuch zu erkennen. Ich glaube, das hat sich in der letzten Betaversion von SWFUpload geändert, aber trotzdem ist es ratsam, etwas reinzulegen, wie 'ok'. Verwenden Sie für Fehler etwas wie HttpResponseBadRequest oder dergleichen.

  3. Schließlich, falls Sie Probleme, sie zu finden ist, ist die hochgeladene Datei in request.FILES :)

Wenn Sie etwas verwirrenden Ich habe nicht abgedeckt haben, etwas ausführlichere frei fühlen zu schreiben und ich werde glücklich sein zu helfen.

+4

Dies ist eine ausgezeichnete Antwort auf eine wirklich schreckliche Frage. Insbesondere der zweite Absatz von Punkt 1 hat mir geholfen. Vielen Dank. – bouvard

0

Die folgende Django-spezifische Implementierung zur Behebung dieses Problems (d. H., Meine Uploads sind in Firefox mit einem 302 Redirect fehlgeschlagen).

In meiner ersten Ansicht, dass die Seite mit dem Uploader auf sie erzeugt, sah ich die Plätzchen und fand sessionid

ipdb> self.request.COOKIES 
{'csrftoken': '43535f552b7c94563ada784f4d469acf', 'sessionid': 'rii380947wteuevuus0i5nbvpc6qq7i1'} 

Als ich sah, was in der SWFUploadMiddleware geschrieben wurde (wenn Firefox), Ich habe festgestellt, dass die SessionID nicht gesetzt wurde.

In meiner ursprünglichen Ansicht, die die Seite generiert, die den Upload-Handler enthält, habe ich die sessionid zum Kontext hinzugefügt.

context['sessionid'] = self.request.session.session_key 

In meiner swfuploader Einstellungen, fügte ich sessionid auf die Post-params Option wie folgt:

post_params: {... "sessionid": "{{ sessionid }}" ...}, 

Nun, wenn ich in der SWFUploadMiddleware sah, konnte ich sehen, die sessionid geschrieben werden, und Meine Uploads funktionierten, wenn Firefox.

ipdb> request.POST 
<QueryDict: {... u'session_id': [u'rii380947wteuevuus0i5nbvpc6qq7i1'],...}> 

Für Vollständigkeit, sieht meine SWFUploadMiddleware so ...

from django.conf import settings 
from django.core.urlresolvers import reverse 

class SWFUploadMiddleware(object): 
    def process_request(self, request): 
     if (request.method == 'POST') and (request.path == reverse('upload_handler')) and request.POST.has_key(settings.SESSION_COOKIE_NAME): 
      request.COOKIES[settings.SESSION_COOKIE_NAME] = request.POST[settings.SESSION_COOKIE_NAME] 
    # http://stackoverflow.com/questions/6634666/403-forbidden-error-on-swfupload-and-django 
    # Fix for problem uploading images (403 error) in Firefox 20 and others 
    if request.POST.has_key('csrftoken'): 
      request.COOKIES['csrftoken'] = request.POST['csrftoken']