请教大神关于 Django 自动发邮件时候的 CSRF 问题

环境:

系统:Mac OS 10.12.6

Python 3.5

Django 1.11

MySQL 5.6.36

------------------------------------------------------

问题描述:

我在练习 Contact Us 部分,收集用户反馈信息。




输入后得到的页面是:




下面是我的 setting.py 的 MIDDLEWARE:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

下面是我的 views.py :

from django.shortcuts import render_to_response, render
from django.http import HttpResponseRedirect
from mysite.books.models import Book
from django.core.mail import send_mail
from mysite.contact.forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            send_mail(
                cd['subject'],
                cd['message'],
                cd.get('email', 'zwhuang@tigresstech.com'),
                ['781938094@qq.com']
            )
            return HttpResponseRedirect('/contact/thanks/')

    else:
        form = ContactForm()

    return render_to_response('contact_form.html', {'form': form})
    

def thanks(request):
    return render_to_response('thanks.html')

下面是我的 contact_form.html :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Contact us</title>
</head>
<body>
    {% if form.errors %}
        <p style="color: red">
            Please correct the error{{ form.errors|pluralize }} below.
        </p>
    {% endif %}

    <form action="" method="post" >
        {% csrf_token %}
        <table>
            {{ form.as_table }}
        </table>

        <input type="submit" name="Submit">
    </form>
</body>
</html>

上面是我想解决的问题。谢谢。

顺便说一句,我如果注释掉 setting 里面 MIDDLEWARE 的  

'django.middleware.csrf.CsrfViewMiddleware',

那邮件就可以正常发送。


另外,我想问一下 

from django.views.decorators.csrf import csrf_exempt
这里面的 csrf_exempt 怎么用呢?可以解决 这个 CSRF 的问题吗?


谢谢各路大神指点!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值