2016-10-12 5 views
0

Django 1.10とPython 3.5.2を使用して作成されたScreenPrinting会社のシンプルなウェブサイトがありますが、 "Get a Quote"ページ。私のユーザが画像を電子メールでアップロードするにはどうすればいいですか?[Django]

ユーザーは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です:私は127.0.0.1にこれをテストする場合

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, ['[email protected]'], 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}) 

私が提出クリックして、フォームが同じでリフレッシュしますinfo、イメージはもう存在しません。

また、console.EmailBackendを使用してテストすると、エラーは発生しません。実際、submitをクリックしてもいくつかのcssファイルをリロードする以外の効果はないようです。

アイデア?

答えて

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/

関連する問題