Как заставить Django связаться со мной через send_mail? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытался использовать 6 различных учебных пособий, чтобы сделать это, но все они давали разные варианты, так что я действительно расстроен темпами, которые я делаю ... Я думаю, что приближаюсь к последним нескольким шагам, но янужна помощь.Вот код, который у меня есть в моем проекте Django:

# -- settings.py--
EMAIL_BACKEND = 'django.core.mail.backends.stmp.EmailBackend'
EMAIL_HOST = 'http://smtp.gmail.com/'
EMAIL_HOST_USER = 'a spare Gmail I have'
EMAIL_HOST_PASSWORD = 'the password'
EMAIL_USE_TLS = False
EMAIL_PORT = 465

..

# -- views.py --
# (assumed relevant imports are imported)
class ContactView(FormView):
    template_name = 'CONTACT.html'
    form_class = ContactForm
    success_url = 'Success!'
    context_vars = {
        'example_name_f': 'Adam',
        'example_name_l': 'Smith',
        'example_email': 'smith.a@gmail.com',
        'example_subject': 'Sales proposal',
        'example_text': 'Hi Mark, I have a sales proposal for you!',
    }
    def get(self, request):

        return render(request, 'CONTACT.html', ContactView.context_vars)

    def contact(self, request):
        if request.method == 'POST':
            form = self.form_class(data=request.POST)

            if form.is_valid():
                time = request.POST.get('time', '')
                first_name = request.POST.get('first_name', '')
                last_name = request.POST.get('last_name', '')
                email_address = request.POST.get('email_address', '')
                subject = request.POST.get('subject', '')
                text = request.POST.get('text', '')

                send_mail(subject, text, email_address,
                          ['999@outlook.com'], fail_silently=False)

            return redirect('CONTACT-done.html')  # CONTACT-done is a temporary success screen

        return render(request, 'CONTACT.html', ContactView.context_vars)

Соответствующая часть HTML:

<div class="container-fluid" style="width: 100%; height: 100%">
        <form action="" method="post">

            <label for="first-name">First Name</label>
            <input id="first-name" name="first-name" type="text" placeholder="{{ example_name_f }}">
                <!-- Note: placeholder vs value attributes similar -->
                <!-- id is for HTML, name is for views.py -->
            <label for="last-name">Last Name</label>
            <input id="last-name" name="last-name" type="text" placeholder="{{ example_name_l }}">
                <!-- Its unnecessary to use context vars for placehoder text -->
            <label for="email">Email Address</label>
             <input id="email" name="email" type="email" placeholder="{{ example_email }}" required>

            <label for="subject">Subject</label>
             <input id="subject" name="subject" type="text" placeholder="{{ example_subject }}">

            <label for="text">Message:</label>
             <input id="text" name="text" type="text" placeholder="{{ example_text }}" required>

            <input type="submit" value="Send">
        </form>
    </div>

Некоторые учебники рекомендовали a{{form.as_p}} подход в HTML, но некоторые просто сделали основной стиль HTML, как я делал выше.Не уверен, что делать отсюда.Нажатие «Отправить» на моем веб-сайте приводит к ошибке 403 CSRF.Запрос отменен.Пожалуйста, объясните как можно более простым способом, я не новичок в программировании, но я тоже не специалист по CS.Благодаря.

1 Ответ

0 голосов
/ 21 февраля 2019

вам нужен токен CSRF:

<form ...>
{% csrf_token %}
...
</form>

Как и в этом официальном примере документации :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...