请教大神关于 Django 自动发邮件时候的 CSRF 问题
程序员文章站
2024-03-24 14:17:52
...
环境:
系统: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', 'aaa@qq.com'),
['aaa@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 的问题吗?
谢谢各路大神指点!
上一篇: 60. Linux 磁盘管理 - 概念
下一篇: 关于函数堆栈的问题请教...