Решение Python, позволяющее загружать фотографии по электронной почте на мой сайт Django - PullRequest
2 голосов
/ 13 октября 2010

Я изучаю Python / Django, и мой любимый проект - это сайт для обмена фотографиями.Я хотел бы дать пользователям возможность загружать свои фотографии с помощью адреса электронной почты, такого как Posterous, Tumblr.Исследования привели меня к мысли, что мне нужно использовать следующее:

- задание cron - анализатор почты python - cURL или libcurl - то, что обновляет мою базу данных

Как все эти частибудет работать вместе, все еще там, где мне нужны разъяснения.Я знаю, что cron запустит скрипт, который будет анализировать электронную почту (звучит просто при чтении), но как начать все это сложно.Буду очень признателен за любую помощь, указав мне правильное направление, учебники или ответ.

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

Чтение сообщений из maildir. Это не оптимизировано, но покажет, как вы можете анализировать электронные письма. Конечно, вы должны хранить информацию о файлах и пользователях в базе данных. Импортируйте модели в этот код и сделайте правильные вставки.

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 голосов
/ 13 октября 2010

Не уверен, для чего вам нужен cURL в этом списке - что он должен делать?

Ты не скажешь, где у тебя проблемы. Мне кажется, вы можете сделать все это с помощью команды управления Django , которая может быть запущена на обычном cron. Стандартная библиотека Python содержит все необходимое для доступа к почтовому ящику (smtplib) и анализа сообщения для получения изображения (email и email.message). Затем сценарий может просто сохранить файл изображения в соответствующем месте на диске и создать соответствующую запись в базе данных с помощью обычного Django ORM.

...