簡體   English   中英

如何使用send_mail使Django與我聯系表單?

[英]How to make a Django contact me form with send_mail?

我嘗試使用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>

有些教程推薦使用HTML的{{form.as_p}}方法,但有些只是像我上面那樣做基本的HTML樣式。 不知道從這里做什么。 點擊我的網站上的發送會導致403 CSRF驗證失敗。 請求中止。 請以盡可能簡單的方式進行說明,我不是編程新手,但我也不是CS人士。 謝謝。

您需要CSRF令牌:

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

如此官方文檔示例所示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM