フリーランスで活動していて、自身のWebサイトが仕事の受け口になっているような方も多いと思います。
フォームをスクラッチで書くとなると結構大変ですが、Djangoなら強力なFormViewがあるので非常に簡単
に実装することができます。
直近でDjangoプロジェクトでお問い合わせフォームを作る機会がありましたので、
DjangoのFormViewを使ったお手軽フォーム実装の記録をまとめます。
Django: ver. 1.8
SMTP: GmailのSMTPサーバを利用
from django import forms
from django.core.mail import send_mail
from django.conf import settings
class ContactForm(forms.Form):
name = forms.CharField() # 名前
message = forms.CharField(widget=forms.Textarea) #問い合わせ内容
# メール送信処理
def send_email(self):
# send email using the self.cleaned_data dictionary
subject = self.cleaned_data['name']
message = self.cleaned_data['message']
from_email = settings.EMAIL_HOST_USER
to = [settings.EMAIL_HOST_USER]
send_mail(subject, message, from_email, to)
まぁ、大部分は公式ドキュメントに記載のとおりですね。苦笑
実はこれちょっと罠があって、send_email(self) の内容をきちんと定義してあげないとメールを送信できません。
# send email using the self.cleaned_data dictionary
上記のコメントのとおりなのですが、フォームから送信(POST)したデータは、ContactForm Contact.Form の cleaned_data に格納されます。
なので、その情報をもとにメール送信する処理を自分で書いてあげる必要があります。
それが def send_mail(self): 内の情報となります。
ぼくはここでちょっとハマりました。^^;
...
from django.views.generic.edit import FormView
from .forms import ContactForm
...
class ContactView(FormView):
template_name = 'contact/index.jade'
form_class = ContactForm
success_url = '/contact/'
def form_valid(self, form):
# This method is called when valid form data has been POSTed.
# It should return an HttpResponse.
form.send_email()
return super(ContactView, self).form_valid(form)
form_valid の中で、先程定義した form.send_email() を実行しています。
form(action='', method='post')
input(type='hidden', name='csrfmiddlewaretoken', value='#{csrf_token}')
#{form.as_p}
input(type='submit', value='Send message')
from_email = settings.EMAIL_HOST_USER
to = [settings.EMAIL_HOST_USER]
# Gメールで送信する例
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'hogehoge@gmail.com'
EMAIL_HOST_PASSWORD = '2段階認証プロセス設定後に発行したアプリパスワード'
EMAIL_USE_TLS = True
長くなりましたが、以上です。
続編も書きました。あわせてどうぞ!
Djangoのお問い合わせフォームをいい感じにカスタマイズする
mac に pip をインストールする
mac は標準で python が入っていますが、パッケージ管理の pip がインストールされていないので入れてみました。
2017/05/26 09:00
[GAS] Google Drive の特定フォルダ配下のフォルダ・ファイルの権限を一括で移譲する
Google Drive の特定フォルダ配下のファイル・フォルダの権限を一括で移譲するツールを Google Apps Script で作りました。
2018/11/10 15:54
[Windows] Ophcrack を使ってユーザーパスワードを解析する方法
家族で使っていた Windows7 のログインパスワードを忘れたため、Ophcrack を使って解析したときの記録です。
2017/09/30 21:00
[shell] フォルダ内にある大量の ZIP ファイルをまとめて解凍する
とある ZIP を解凍すると中に大量の ZIP が居たときに幸せになれるコマンドを紹介します
2018/06/19 23:45
[MySQL] データファイルから DB を復元する
先日 MySQL が再起動できなくなる問題が発生し、急遽データファイル(.frm, .ibd)から復元しました
2018/11/25 12:44