Django-app, die benutzerfreundlich, mehrere / Massen Datei-Upload-Funktionalität für andere Anwendungen zur Verfügung stellen kann

StackOverflow https://stackoverflow.com/questions/1627165

  •  06-07-2019
  •  | 
  •  

Frage

Ich werde ehrlich sein: Das ist eine Frage, die ich auf dem Django-Nutzer gefragt Mailingliste der vergangenen Woche. Da ich keine Antworten gibt noch bekommen hätte, bin ich es auf Stack-Überlauf in der Hoffnung reposting, dass es hier mehr Aufmerksamkeit bekommt.

Ich möchte eine App erstellen, die es einfach, benutzerfreundlich zu tun macht, mehrere / Masse-Datei-Upload in Ihren eigenen Anwendungen. Mit benutzerfreundlichen I mean laden wie Google Mail, Flickr, ... wo der Benutzer mehr auswählen Dateien auf einmal in dem Browse-Datei-Dialog. Die Dateien werden dann hochgeladen sequentiell oder parallel und ein schöner Überblick über die ausgewählten Dateien neben sie mit einem Fortschrittsbalken auf der Seite angezeigt. A ‚Abbrechen‘ Upload-Button ist auch eine mögliche Option.

, dass Nettigkeit ist Alle in der Regel durch die Verwendung eines Flash-Objekts gelöst. Komplett Lösungen sind da draußen für die Client-Seite, wie: SWFUpload http://swfupload.org/ , FancyUpload http://digitarald.de/project/fancyupload/ , YUI 2 Uploader http://developer.yahoo.com/yui/uploader/ und wahrscheinlich viele mehr.

Ofcourse Der Trick ist immer die Lösungen integriert in Ihre Projekt. Gerade in einem Rahmen wie Django, doppelt so, wenn Sie wollen sie wiederverwendbar sein.

Also, ich habe ein paar Ideen, aber ich bin weder ein Experte für Django noch auf Flash-basierte Upload-Lösungen. Ich werde meine Ideen hier in der Hoffnung teilen bekomme ein Feedback von mehr Wissen und erfahren Leuten. (Oder auch nur einige ‚Ich will auch das!‘, Antwortet :))

Sie werden feststellen, dass ich ein paar Annahmen getroffen werden: Das ist das halten (Initial) Umfang der Anmeldung unter Kontrolle. Diese Annahmen sind natürlich fraglich:

In Ordnung, meine Idee ist so weit:

  • Wenn Sie mehrere Dateien auf Massenupload möchten, gehen Sie haben Modell enthält jede Datei in. D. h das Modell wird ein enthalten Filefield oder ein Imagefield. Modelle mit mehreren (aber natürlich finite) Menge an FileFields / ImageFields sind nicht in der Notwendigkeit leicht Masse Upload imho: wenn Sie eine haben Modell mit 100 FileFields Sie etwas falsch machen :) Beispiele, wo Sie würde meine vorgestellte Art von Massen-Upload wollen:

    • Eine App, die nur ein Modell ‚Broschüre‘ mit einem Dateifeld hat, ein Titelfeld (dynamisch aus dem Dateinamen erstellt) und ein DATE_ADDED Feld.
    • Eine Fotogalerie App mit den Modellen 'Gallery' und 'Foto'. Sie wählen ein Galerie hinzufügen Bilder zu, die Bilder und neue Foto-Objekte laden sind mit der gewählten Galerie erstellt und Fremdschlüssel festgelegt.
  • Es wäre schön, die Lage sein, um die Anwendung zu konfigurieren oder erweitern für Ihre Lieblings-Flash-Upload-Lösung. Wir können über eine der drei Pick als ein Standard, aber die App implementieren, so dass die Menschen leicht hinzufügen zusätzliche Implementierungen (ein bisschen wie Django können mehrere verwenden Datenbanken). Lassen Sie es auf eine bestimmte Client-Seite Lösung Agnostiker.

  • Wenn wir eine auswählen müssen, mit zu beginnen, wählen Sie vielleicht das mit der kleinster Raum? (Kleinster Download von Client-seitigen)

  • Die Flash-basierte Lösungen asynchron (und entweder nacheinander oder parallel) Schreiben Sie die Dateien auf eine URL. Ich schlage vor, dass die URL lokal zu sein zu unserer generischen app (so es das gleiche für jede App ist, wo Sie unsere verwenden App). Diese URL wird zu einer Ansicht geht von unserer generischen App zur Verfügung gestellt.

  • Die Ansicht folgendes tun: ein neues Modell Instanz erstellen, fügen Sie die Datei, OPTIONALLY EXTRA STUFF DO und die Instanz speichern.

  • DO EXTRA STUFF-Code ist, dass die Anwendung, die unsere App nutzt will laufen. Es muss keinen zusätzlichen Code liefern, wenn das Modell nur hat Filefield / Imagefield der Standard-View-Code wird die Arbeit machen. Aber die meisten App wollen zusätzliche Dinge tun Ich denke, wie das Ausfüllen die anderen Felder: Titel, DATE_ADDED, Foreign, ManyToMany, ...

  • Ich habe nicht yet dachte über einen Mechanismus für DO EXTRA STUFF. Gerade Umwickeln der allgemeine app Blick in den Sinn kam, aber das ist nicht Entwickler freundlich, da Sie Ihre eigenen URL-Muster schreiben und Ihr müßten eigene Ansicht. Dann haben Sie die Flash-Lösungen anweisen, eine neue URL zu verwenden, usw... Ich denke, so etwas wie Signale hier verwendet werden könnte?

  • Formulare / Admin: Ich bin immer noch sehr lückenhaft auf, wie das alles am besten sein könnte integriert in der Admin-oder generische Django Formen / widgets / ... (Und das ist waren mein Mangel an Django Erfahrung zeigt):

    • Im Fall des Gallery / Photo App: Sie könnten eine Masse Photo Upload Widget auf der Galerie Detail bieten bilden. Aber was, wenn die Galerie Instanz noch nicht gespeichert? Die Datei Upload-Ansicht wird die Foreign nicht auf dem Foto festgelegt werden kann, Instanzen. Ich sehe, dass der Auth-app, wenn Sie einen Benutzer erstellen, zuerst fragt für Benutzername und Passwort und bieten Ihnen nur dann mit einem größeren bilden in emailadres zu füllen, nehmen Rollen etc. Wir etwas tun könnte, wie das.
    • Im Falle einer App mit nur einem Modell: Wie bieten Ihnen ein Formular in der Django Admin Ihre Masse zu tun hochladen? Man kann es nicht mit dem Detail Form des Modells tun, das ist nur für eine Modellinstanz.

Es gibt wahrscheinlich Dutzende weitere Fragen, bevor die beantwortet werden müssen Ich kann auch auf diese App starten. Also bitte sagen Sie mir, was Sie denken! Geben ich Eingang! Was haben Sie gern? Was nicht? Was würden Sie anders machen? ist diese Idee solide? Wo ist es nicht?

Danke!

War es hilfreich?

Lösung

ich nur eine einfache App für das vor etwa einem Monat veröffentlicht. django-Uploadify

Es ist im Grunde ein Django Template-Tag, der für die sehr nette Uploadify (erfordert jQuery) als Wrapper fungiert. Die Benutzung ist so einfach wie das Hinzufügen dieser zu Ihrer Vorlage ...

{% load uploadify_tags }{% multi_file_upload ‘/upload/complete/url/’ %}

Der Tag wird Ereignisse ausgelöst (1 pro Datei) auf der Client-Seite und Server-Seite (Django-Signal), um anzuzeigen, wenn eine eingehende Datei empfangen wurde.

Wenn zum Beispiel angenommen haben Sie ein Modell ‚Media‘, die alle vom Benutzer hochgeladenen Dateien verarbeitet ...

def upload_received_handler(sender, data, **kwargs):
    if file:
        new_media = Media.objects.create(
            file = data,
            new_upload = True,
        )
        new_media.save()

upload_recieved.connect(upload_received_handler, dispatch_uid=‘whatever.upload_received’)

Schauen Sie sich die Wiki für Informationen, wie man es einrichten und erstellen das Signal Handler (Client / Server).


über Ihre konzeptionelle Umsetzung von oben, hier ein paar Punkte der Betrachtung:

  • Nachdem die App automatisch die „File Model“ Instanz erstellen ist wahrscheinlich nicht so robust wie Menschen, die bereits ihre eigenen Modelle haben mit denen sie arbeiten
  • Wenn Sie irgendeine Art von Sicherheit oder Authentifizierung implementieren möchten, müssen Sie ein offenes System und weniger ein ‚auto-create‘ type
  • Ich glaube wirklich, Signale / Ereignisse die Art und Weise, dies zu handhaben und behandeln auch die ‚DO OTHER STUFF‘ Teil dessen, was Sie genannt haben.
  • Meine Schlussfolgerung war, dass Multi-Upload kann nie wirklich ein Formular Widget in dem Sinne sein, dass Django Form Widgets implementiert. 1 Datei wird höchstwahrscheinlich durch eine Modellinstanz (mit einigen Ausnahmen) dargestellt werden, was bedeutet, dass wir mit einer Situation enden, wo ein Widget N Modellinstanzen darstellen kann. Jedoch ist Django Setup, so dass ein Widget 1-Wert für 1 Feld stellt in 1 Instanz. Es passt einfach nicht für die Mehrheit der Anwendungsfälle es als ein Widget zu haben (daher, warum ich die Template-Tag Route ging).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top