2016-10-31 3 views
0

не может понять, как вызвать send_email в forms.py из views.py может кто-нибудь мне помочь. это вопрос обзорногоНе удается отправить электронное письмо в Python/Django

forms.py 

from django import forms 
from django.core.mail import send_mail 


class ContactForm(forms.Form): 
    subject = forms.CharField(max_length=75) 
    message = forms.CharField(widget=forms.Textarea) 
    sender = forms.EmailField() 

    def send_email(self): 
     send_mail(subject, message, sender, '[email protected]', fail_silently=False) 
     print('sent') 

и вот views.py

views.py 

from django.shortcuts import render 
from django.views.generic.edit import FormView 
from .forms import ContactForm 

... 

class ContactView(FormView): 
template_name = "main/contact.html" 
form_class = ContactForm 
success_url = '/thanks/' 

def form_valid(self, form): 
    ContactForm.send_email(form) 
    return super(ContactView, self).form_valid(form) 

ответ

1

Для начала, вы звоните ContactForm.send_email, которые будут работать только тогда, когда это был метод класса (см here, если вы заинтересованы о методы класса). Вы должны вызвать send_email на экземпляре вы создали, form_class:

class ContactView(FormView): 
    template_name = "main/contact.html" 
    form_class = ContactForm 
    success_url = '/thanks/' 

    def form_valid(self, form): 
     form_class.send_email(form) 
     return super(ContactView, self).form_valid(form) 

Кроме того, я рекомендовал бы проверить, что сервер и настройки электронной почты настроены правильно. Поэтому убедитесь, что вы можете отправлять электронную почту с простого сценария python.

Смежные вопросы