Projekt Dateihochlader

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Projekt Dateihochlader

Beitragvon Laines » Donnerstag 15. Mai 2008, 18:47

Hallo,
in meinem Studium sollen wir anhand eines Projektes Python lernen. In C/C++ habe ich schon 2 Jahre Erfahrung.

Das Projekt lautet wie folgt:

""Datenhochlader"

* Generieren eines individuellen Logins + Passwords beim ersten Einloggen
* Hochladen von Daten in zu definierende Strukturen, die dann auch nur von dem Hochladenden eingesehen werden können
* Export über eine XML-Datei, die aus einer Kombination von Struktur + Datei (oder Link auf Datei) besteht
* Es muss möglich sein, hochgeladene Dateien durch neue Versionen zu ersetzen, wobei die alten Versionen über eine History-Funktion zuänglich bleiben sollen

Kommentar: Eventuell könnte hier eine Kombination mit svn + Apache Authentication sinnvoll sein. Wäre zu prüfen"

Ich bräuchte ein Paar Ansätze wie man hier beginnen könnte, welche Bibliotheken / Techniken man braucht um das tun zu können.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Donnerstag 15. Mai 2008, 19:09

Django + SVN-Bindings.


Das sollte eigentlich reichen ;)

Alternativ:
Plone und das dann ein `wenig` abspecken ;)
Oder, sogar ernst gemeint:
Zumindest die ZODB nutzen, die hat ne Versionierung und ist hierarisch aufgebaut, das würde ganz ordentlich passen.

Alles weitere sagt Google.

btw:
C oder C++, oder jeweils 2 Jahre?
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Donnerstag 15. Mai 2008, 19:58

Ich habe an sowas wie an WebDav gedacht. In dem Wikipedia einrag steht auch "Zudem ist eine Versionskontrolle implementiert." ist damit sowas wie svn gemeint? Hat jemand Erfahrungen damit?
lunar

Beitragvon lunar » Freitag 16. Mai 2008, 01:00

Man kann nicht alles in Datenbanken speichern, große Binärdateien z.B. eignen sich eher schlecht. BLOBs in Datenbanken abzulegen ist eher schlechter Stil.

Stünde ich vor der Aufgabe, sowas zu *realisieren* (nicht zu *entwicklen*), dann würde ich einfach nur Trac als SVN-Frontend aufsetzen und eventuell eine kleine Webanwendung für Commits schreiben. Zusätzlich noch ein Plugin, welches die SVN-Dateisystemstruktur als XML exportiert (was auf eine Kombination von ElementTree und os.walk in einem lokalen Checkout hinausläuft ;) ).

Das wird aber kaum das sein, was die Uni fordert... also bleibt wohl nur, ein paar existierende Bibliotheken miteinander zu verbinden. SVN bringt Python-Bindings mit, für Webprogrammierung gibt es Werkzeug, und XML verarbeite ich am liebsten mit lxml...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 16. Mai 2008, 01:01

Laines hat geschrieben:Ich habe an sowas wie an WebDav gedacht. In dem Wikipedia einrag steht auch "Zudem ist eine Versionskontrolle implementiert." ist damit sowas wie svn gemeint? Hat jemand Erfahrungen damit?

SVN hat die Möglichkeit, über WebDAV zugriff auf Ressourcen zu bieten, das was in der Wikipedia steht meint vermutlich eher Delta-V (das ist der Modus in dem SVN unsagbar langsam sich seine Dateien herunterlädt).

Eine Alternative zu SVN könnte Git sein, wie im Artikel Using Git as a versioned data store in Python beschrieben wird. Ich glaub, SVN wäre mir für die Aufgabe auch zu langweilig :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Beitragvon lunar » Freitag 16. Mai 2008, 01:05

Geil :D ``git issues`` finde ich mal echt cool ;)
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 16. Mai 2008, 01:37

Letztens wurde das scheinbar durch ditz populär, ticgit ist eine weitere Software die auf Git aufbaut. Nur eben in Ruby (da ist git issues vielleicht sogar eine gute Idee).

Hmm, es gibt einfach zu viele gute DVCS als das man sich für irgendeines irgendwann entscheiden könnte. Immer wenn eines ein Killerfeature hat, dann rüstens die anderen mehr oder weniger gut nach (oder sogar auch besser).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Freitag 16. Mai 2008, 07:33

lunar hat geschrieben:Das wird aber kaum das sein, was die Uni fordert... also bleibt wohl nur, ein paar existierende Bibliotheken miteinander zu verbinden. SVN bringt Python-Bindings mit, für Webprogrammierung gibt es Werkzeug, und XML verarbeite ich am liebsten mit lxml...


Genau :-)
Also sehe ich das richtig das es keinen Client - Server gibt sondern das ganze als Webanwendung laufen soll... Aber wie kann ich Python als Webanwendung laufen lassen? Mit Django als Unterbau? Soweit ich weis kann aber auch Apache Python interpretieren?!?! Und ich brauch ja auch eine art Oberfläche mit der ich die Daten Hochladen kann?!

Ich glaube Django + svn währe hier die schnellste Lösung, oder irre ich mich?
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Freitag 16. Mai 2008, 08:17

Aber wie kann ich Python als Webanwendung laufen lassen?

Das stichwort hier ist WSGI. Programmiere dein Programm gemäß WSGI (oder in einem der Frameworks, die WSGI können), und du kannst es per cgi, fcgi, scgi, mod_python, mod_wsgi etc im Web verfügbar machen.
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Dienstag 27. Mai 2008, 10:14

Gibt es in Django ein fertiges Modul/Widget welches ein Fenster öffnet und man eine Datei auswählen kann welche dann Hoch geladen wird?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Dienstag 27. Mai 2008, 15:47

Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Sonntag 1. Juni 2008, 14:36

Hi,
ich habe jetzt versucht es hin zu bekommen, aber es funktioniert nicht so wie ich will.
Könnte mir bitte Jemand ein Beispiel Zeigen?
Hier mal meine Ansätze:

models.py

Code: Alles auswählen

from django.db import models

class File(models.Model):
   filename = models.FileField(upload_to='django/%Y/%m/%d')

   class Admin:
      pass


views.py

Code: Alles auswählen

from hochlader.models import *
from settings import MEDIA_ROOT
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, HttpResponse
from datetime import datetime
import os
import string
import re

def upload(request):
   if request.method == "POST":
      file = None
      filename = None
      filename = request.FILES['filename']['filename']
      file = request.FILES
      return HttpResponse('Hallo!')
      return HttpResponse(request.FILES['filename'])
      ''' file.save_FOO_file(filename, raw_contents) '''
   else:
      return render_to_response('upload.html')


upload.html

Code: Alles auswählen

<html>
<html>
<head>
<title>Files Upload</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<p>Browse file: <br />
<input type="file" name="filename" size="40" maxlength="500"/></p>

{% if nofile %}
<p class="error">* You have to choose a file to upload!</p>
{% endif%}

<p><input type="submit" value="Upload file"/></p>
</form>
</body>
</html>
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 1. Juni 2008, 16:35

Laines hat geschrieben:ich habe jetzt versucht es hin zu bekommen, aber es funktioniert nicht so wie ich will.

Die Frage ist was passiert und was du erwartest. In deinem Beispiel legst du ja nur Referenzen zu den Files an, die dann verschwinden wenn die Funktion beendet. Was das geplant? Namen mit ``None`` zu initialisieren ist völlig unnötig und zwei ``return`` hintereinander bringen auch nichts.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Laines
User
Beiträge: 39
Registriert: Donnerstag 15. Mai 2008, 18:42

Beitragvon Laines » Sonntag 1. Juni 2008, 23:13

Auf der HTML Seite soll die Datei die hochgeladen werden soll, ausgewählt werden. Durch drücken auf den Button soll sie schließlich hochgeladen werden.

Das war es schon :)

Ich habe einfach den letzten stand von meinen Versuchen hier gepostet... Hätte ihn etwas "bereinigen" müssen... :wink:
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 1. Juni 2008, 23:43

Laines hat geschrieben:Auf der HTML Seite soll die Datei die hochgeladen werden soll, ausgewählt werden. Durch drücken auf den Button soll sie schließlich hochgeladen werden.

Ich denke dass passiert jetzt auch. Wird hochgeladen und der Server verwirft die Datei.
My god, it's full of CARs! | Leonidasvoice vs Modvoice

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder