2010-10-13 18 views
2

J'apprends Python/Django et mon projet favori est un site de partage de photos. Je voudrais donner aux utilisateurs la possibilité de télécharger leurs photos en utilisant une adresse e-mail comme Posterous, Tumblr. La recherche m'a amené à croire que je dois utiliser les éléments suivants:Solution Python permettant de télécharger des photos par e-mail sur mon site Django

- emploi Cron - analyseur mail python - cURL ou libcurl - quelque chose qui met à jour ma base de données

Comment toutes ces pièces travailler ensemble est toujours là où j'ai besoin de clarification. Je sais que le cron va lancer un script qui analyse l'e-mail (cela semble simple en lecture), mais comment commencer avec toutes ces choses est intimidant. Toute aide pour me diriger dans la bonne direction, des tutoriels, ou une réponse serait grandement appréciée.

+0

Avez-vous un accès direct à maildir ou boîte aux lettres? – iddqd

+0

oui, j'ai mon propre VPS –

Répondre

3

Lire les messages de maildir. Ce n'est pas optimisé mais montrez comment vous pouvez analyser les emails. Bien sûr, vous devez stocker des informations sur les fichiers et les utilisateurs sur la base de données. Importez des modèles dans ce code et faites les bons insertions.

import mailbox 
import sys 
import email 
import os 
import errno 
import mimetypes 


mdir = mailbox.Maildir(sys.argv [1], email.message_from_file) 


for mdir_msg in mdir: 
    counter = 1 
    msg = email.message_from_string(str(mdir_msg)) 
    for part in msg.walk(): 
     # multipart/* are just containers 
     if part.get_content_maintype() == 'multipart': 
      continue 
     # Applications should really sanitize the given filename so that an 
     # email message can't be used to overwrite important files 
     filename = part.get_filename() 
     if not filename: 
      ext = mimetypes.guess_extension(part.get_content_type()) 
      if not ext: 
       # Use a generic bag-of-bits extension 
       ext = '.bin' 
      filename = 'part-%03d%s' % (counter, ext) 
     counter += 1 
     fp = open(os.path.join('kupa', filename), 'wb') 
     fp.write(part.get_payload(decode=True)) 
     fp.close() 
     #photomodel imported from yourapp.models 
     photo = PhotoModel() 
     photo.name = os.path.join('kupa', filename) 
     photo.email = .... 
     photo.save() 
+0

Vous devrez importer le modèle –

+0

et ce script serait appelé par le cron? –

0

Vous ne savez pas exactement ce dont vous avez besoin cURL dans cette liste - que doit-il faire?

Vous ne dites pas vraiment où vous rencontrez des problèmes. Il me semble que vous pouvez faire tout cela dans un Django management command, qui peut être déclenché sur un cron régulier. La bibliothèque Python standard contient tout ce dont vous avez besoin pour accéder à la boîte aux lettres (smtplib) et analyser le message pour obtenir l'image (email et email.message). Le script peut alors simplement enregistrer le fichier image sur l'emplacement approprié sur le disque, et créer une entrée correspondante dans la base de données via l'ORM Django normal.