我有一个简单的网站,用于使用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文件之外没有任何其他效果。
有什么想法吗?
答案 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/