簡體   English   中英

禁止(CSRF 令牌丟失或不正確。):Django 表單

[英]Forbidden (CSRF token missing or incorrect.): Django form

我正在嘗試使用 Django 將電子郵件帳戶訂閱到時事通訊,當我嘗試單擊“開始”按鈕時,我收到錯誤禁止(CSRF 令牌丟失或不正確。):

這是 views.py 方法:

def newsletterSubscribe(request):
try:
    form = NewsletterUserSignUpForm(request.POST or None)

    if form.is_valid():
        instance = form.save(commit=False)
        if NewsletterUser.objects.filter(email=instance.email).exists():
            messages.warning(request, _('Alerta! El correo ingresado ya se encuentra suscrito.'),
                             'alert alert-warning alert-dismissible')
        else:
            instance.save()
            messages.success(request, _('Correo agregado con exito!'),
                             'alert alert-success alert-dismissible')

            subject = _('Gracias por unirse a nuestro boletín')
            message = _("""Bienvenido al boletín de ADA Robotics. Si deseas no estar suscrito visita: 
                        https://127.0.0.1:8000/unsubscribed""")
            msg = MIMEMultipart('alternative')
            msg['From'] = settings.EMAIL_HOST_USER
            msg['To'] = instance.email
            msg['Subject'] = subject
            part = MIMEText(message, 'plain')
            msg.attach(part)

            mail = smtplib.SMTP(settings.EMAIL_HOST, settings.EMAIL_PORT, timeout=20)
            mail.starttls()

            """
                template = get_template("myapp/sample_template.html")
                context = Context(context_data)
                body_html = template.render(context_data)
                body_text = strip_tags(body_html)
                part1 = MIMEText(body_text, 'plain')
                part2 = MIMEText(body_html, 'html')
                msg.attach(part1)
                msg.attach(part2)
            """

            emailto = [instance.email]
            mail.login(settings.EMAIL_HOST_USER, settings.EMAIL_HOST_PASSWORD)
            mail.sendmail(settings.EMAIL_HOST_USER, emailto, msg.as_string())
            mail.quit()

            """from_email = settings.EMAIL_HOST_USER
                to_email = [instance.email]

                send_mail(subject=subject, from_email=from_email, recipient_list=to_email, message=message, fail_silently=False)"""

    context = {
        'form': form,
    }
    template = 'subscribed.html'
    #return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    return render(request, template, context)
except Exception as ex:
    return render(request, '404.html')

這是模板代碼:

<form id="newsletterForm" action="{% url "newsletterSubscribe" %}" method="POST" class="mr-4 mb-3 mb-md-0">
                            {% csrf_token %}
                            <div class="input-group input-group-rounded">
                                <input class="form-control form-control-sm bg-light" placeholder="Email Address" name="email" id="newsletterEmail" type="text">
                                <span class="input-group-append">
                                    <button class="btn btn-light text-color-dark" type="submit"><strong>GO!</strong></button>
                                </span>
                            </div>
                        </form>

這是我的 urls.py:

path('contact/', contact, name="contact"),
path('subscribed/', newsletterSubscribe, name="newsletterSubscribe"),

我已將中間件添加到我的設置文件中,並遷移數據庫以創建已創建的表。

我想要做的是一個時事通訊表單,它位於模板的 base.html 中,因此它可以在 Web 應用程序的所有其他頁面中使用。

您需要將包含表單對象的上下文傳遞給渲染函數。 您正在加載表單因為它都是 html,但{% csrf_token %}未加載,因為您尚未將表單對象傳遞到模板中。

https://docs.djangoproject.com/en/3.0/topics/http/shortcuts/#render

render(request, template_name, context=None, content_type=None, status=None, using=None)

你的將是:

return render(request, template, context)

暫無
暫無

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

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