2017-09-29 22 views
0

以下のDjangoビューへのPOSTリクエストでは、(403)CSRFの検証に失敗しました。隠されたcsrfトークンがページのソースに表示されることを確認しました。他のビューでもエラーなしでPOSTリクエストを行うことができます。私はさらにデバッグする方法が不明です。Django CSRFの検証に失敗しました。{%csrf_token%}

views.py:

def email(request): 
    if request.method == 'POST': 
     email = request.POST['email'] 
     fd = open('emaildb.csv','a') 
     fd.write(email+',somefile\n') 
     fd.close() 
     return render(request, 'receipts/email.html', {'text':'Thanks, we''ll get back to you soon.'}) 
    else: 
     return render(request, 'receipts/email.html',) 

email.html:

<form action="email" method="post" enctype="text/plain"> 
    {% csrf_token %} 
    E-mail:<br> 
    <input type="text" name="email"> 
    <input type="submit" value="Send"> 
</form> 
+2

のような使用して、フォームにこのメソッドを呼び出す方法 ' "/プレーンテキスト"'のenctypeを=削除し、もう一度試してはどうですか? 'action =" {%url 'name_of_url'%} "'を使用するか、同じビューでPOSTする場合は 'action =" email "' '全部。 –

+0

有効なトークンがページソースに表示されていても、有効なトークンを持っているとは限りません。それも期限切れになる可能性があります。 –

+1

nik_mが正しいです。単にenctype = "text/plain"を削除するだけで問題は解決しました。 – Feyman81

答えて

0
Uはあなたのurls.pyでその

<form action="email" method="post" enctype="text/plain"> 
    {% csrf_token %} 
    E-mail:<br> 
    <input type="text" name="email"> 
    <input type="submit" value="Send"> 
</form> 

のようなメソッドを呼び出すことはできません

書く必要があります。

url(r'^email/$', views.email, name='email') 

とその

<form action="{% url 'your_folder_name_where_located_your_urls.py:email'%}" method="post" enctype="text/plain"> 
    {% csrf_token %} 
    E-mail:<br> 
    <input type="text" name="email"> 
    <input type="submit" value="Send"> 
</form> 
関連する問題