【问题标题】:Python solution to allow photo uploading via email to my Django website允许通过电子邮件将照片上传到我的 Django 网站的 Python 解决方案
【发布时间】:2011-04-24 20:19:34
【问题描述】:
我正在学习 Python/Django,我的宠物项目是一个照片分享网站。我想让用户能够使用诸如 Posterous、Tumblr 之类的电子邮件地址上传他们的照片。研究使我相信我需要使用以下内容:
-- 定时任务
-- python 邮件解析器
-- cURL 或 libcurl
-- 更新我的数据库的东西
所有这些部分如何协同工作仍然是我需要澄清的地方。我知道 cron 将运行一个解析电子邮件的脚本(阅读时听起来很简单),但是如何开始处理所有这些事情是令人生畏的。任何帮助我指出正确的方向、教程或答案将不胜感激。
【问题讨论】:
标签:
python
django
email
cron
postfix-mta
【解决方案1】:
从 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()
【解决方案2】:
不确定您需要 cURL 在该列表中做什么 - 它应该做什么?
你并没有真正说出你在哪里遇到了麻烦。在我看来,您可以在Django management command 中完成所有这些操作,这可以在常规 cron 上触发。标准 Python 库包含访问邮箱 (smtplib) 和解析消息以获取图像 (email 和 email.message) 所需的一切。然后脚本可以简单地将图像文件保存到磁盘上的相关位置,并通过普通的 Django ORM 在数据库中创建匹配的条目。