我的用户如何上传图片给我发电子邮件[Django]

时间:2016-10-12 18:38:02

标签: python django email upload imagefield

我有一个简单的网站,用于使用Django 1.10和Python 3.5.2构建的Screenprinting公司,但我遇到的问题是我的"获取报价"页。

想法是用户可以访问www.example.com/quote/并向他们提供表单。在这里,他们输入了他们的姓名,电子邮件地址,简短信息,最重要的是他们可以上传图像。

当他们点击提交时,这些数据会使用EmailMessage方法作为电子邮件发送到我的电子邮件地址。我过去已经设置了一个简单的电子邮件表单,所以我知道我的settings.py文件很好。

这是我的forms.py:

class QuoteForm(forms.Form):
name = forms.CharField(required=True)
from_email = forms.EmailField(required=True)
subject = "Quote"
uploaded_image = forms.ImageField()
message = forms.CharField(widget=forms.Textarea)

这是我的views.py:

def quote(request):
form = QuoteForm(request.POST)
if form.is_valid():
    name = form.cleaned_data['name']
    from_email = form.cleaned_data['from_email']
    message = form.cleaned_data['message']
    message = "From: " + name + "\n" + "Return Email: " + from_email + "\n" + "Subject: " + subject + "\n" + "Message: " + message
    uploaded_image = form.cleaned_data['uploaded_image']
    msg = EmailMessage(subject, message, from_email, ['example@email.com'], reply_to=[from_email])
    msg.attach_file(uploaded_image)
    try:
        msg.send()
    except BadHeaderError:
        return HttpResponse('Invalid header found')
    return HttpResponseRedirect('thankyou')
return render(request, "quote.html", {'form': form})

当我在127.0.0.1上测试时,我点击提交并使用相同的信息刷新表单,但图片不再存在。

此外,当我使用console.EmailBackend测试它时,没有错误。实际上,点击提交似乎除了重新加载一些css文件之外没有任何其他效果。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

文件不在request.POST属性中,而是在request.FILES中。您的views.py应如下所示:

def quote(request):
    form = QuoteForm(request.POST, request.FILES)
    if form.is_valid():
        ...
        uploaded_image = request.FILES.getlist('uploaded_image')
        ...

请注意,这是一份原始草稿。我还没有测试过它。另请注意,为了您自己的安全,您可能需要清理文件。例如:检查最大文件大小和内容类型。

有关所有这些的更多信息:https://docs.djangoproject.com/en/1.10/topics/http/file-uploads/