Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与Django一起发送电子邮件;CSRF令牌丢失或不正确_Python_Django_Email_Csrf - Fatal编程技术网

Python 与Django一起发送电子邮件;CSRF令牌丢失或不正确

Python 与Django一起发送电子邮件;CSRF令牌丢失或不正确,python,django,email,csrf,Python,Django,Email,Csrf,我的Django项目中的CSRF令牌有一些问题。 我试图做的是允许用户使用我网站上的表单将文件发送到特定的电子邮件地址。 问题是众所周知的“CSRF令牌丢失或不正确”。 我已经筛选了其他几个问题;然而,似乎我的应用程序与其他应用程序的构建方式不同。我对Web开发还很陌生,更不用说Django了。我认为这可能与视图中的某些内容有关,但似乎这些解决方案对我的目的都没有用处。 如果有人知道我们如何在此处输入或更正CSRF令牌,以下是为添加此电子邮件功能而修改的文件: #views.py from dj

我的Django项目中的CSRF令牌有一些问题。 我试图做的是允许用户使用我网站上的表单将文件发送到特定的电子邮件地址。 问题是众所周知的“CSRF令牌丢失或不正确”。 我已经筛选了其他几个问题;然而,似乎我的应用程序与其他应用程序的构建方式不同。我对Web开发还很陌生,更不用说Django了。我认为这可能与视图中的某些内容有关,但似乎这些解决方案对我的目的都没有用处。 如果有人知道我们如何在此处输入或更正CSRF令牌,以下是为添加此电子邮件功能而修改的文件:

#views.py
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core.context_processors import csrf
from django import forms
from ReadMyPaper.feedbackEmail.forms import EmailForm

#Create your views here.
def send_email(request):
    if request.method != 'POST':
        form = EmailForm()
        return render_to_response('email.html', {'email_form': form})

    form = EmailForm(request.POST, request.FILES)      
    if form.is_valid():
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        email = form.cleaned_data['email']
        attach = request.FILES['attach']
        try:
            mail = EmailMessage(subject, message, settings.EMAIL_HOST_USER, [email])
            mail.attach(attach.name, attach.read(), attach.content_type)
            mail.send()
            #return render_to_response('Email.html', {'message': 'Sent email to %s'%email})
            args = {}
            args.update(csrf(request))
            args['form'] = EmailForm()
            #return render_to_response('email.html' , args)
            #return render_to_response(
            #'email.html', args
            #context_instance=RequestContext(request)
            return render_to_response("email.html", args)


        except:
      #     return render_to_response('admin/Error.html', {'message': 'Either the attachment is too  big or corrupt'})
            return render_to_response('loggedin.html')  
表格

from django import forms

class EmailForm(forms.Form):
    email = forms.EmailField()
    subject = forms.CharField(max_length=100)
    attach = forms.Field(widget = forms.FileInput)
    message = forms.CharField(widget = forms.Textarea)
模板

{% block content %}
{{message}}
{% if email_form %}
<form method="POST" action ="." enctype="multipart/form-data">
        {% csrf_token %}
<br></br>
{{email_form.as_p}}

<label>&nbsp;</label><label>&nbsp;</label><label>&nbsp;</label>
<input type ="submit"  name = "send" value = "Send"/>
</form>
{% endif %}
{% endblock content %}

显然,这些不是gmail地址的真实电子邮件和密码。我有一个实际使用的gmail。

render\u to\u response()
调用替换为
render()

或者将
RequestContext
实例传递给
render\u to\u response()


非常感谢你!代币起作用了。我假设这是因为它自动使用RequestContext?这就是我们在研究这个问题时发现的问题,然而,使用“渲染”的建议从未出现过。谢谢你的帮助。我们现在有一个小问题,电子邮件不发送,但这是一个全新的蠕虫罐头…谢谢!!是的,如果您没有将
RequestContext
传递给
render()
调用,那么它会自动创建这样的上下文实例。
#settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

# Host for sending e-mail.
EMAIL_HOST = 'smtp.gmail.com'

# Port for sending e-mail.
EMAIL_PORT = 587

# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER = ‘myemail@gmail.com'
EMAIL_HOST_PASSWORD = ‘mypassword'
EMAIL_USE_TLS = True 
from django.shortcuts import render

return render(request, 'email.html', {'email_form': form})
return render_to_response("email.html", {'email_form': form},
                          context_instance=RequestContext(request))