djangoを初めて使用して、予定リストページを作成しています。入力テキストボックスにテキストを入力してEnterキーを押すと、CSRFエラーが表示されます。私はこれが重複している可能性が高いことを知っていますが、フォーラムやドキュメントの多くを読んだ後、私はまだこの問題を抱えています。私が試したことは次のとおりです。Django 1.11 - csrf_tokenテンプレートタグを持っているにもかかわらず、CSRF検証に失敗しました
私は{% csrf_token %}
テンプレートタグをフォームタグの中に持っています。
設定のMIDDLEWARE
セクションに'django.middleware.csrf.CsrfViewMiddleware'
があります。
CSRF_COOKIE_SECURE = False
がDjango 1.11のデフォルトです。 httpsではなくhttpを使用しています。
私はビュー内でrender()
機能を使用しています。
Firefoxのプライバシー設定は、サードパーティのCookieを許可するように設定されています。 Chromeでも動作しません。
form
タグにenctype="text/plain"
タグを使用していません。
私はreleaseのこの抜粋に従うことにcontext dictを供給しようとしました:
home.html
<!DOCTYPE html>
<html>
<head>
<title>To-do List</title>
</head>
<body>
<h1>To-do List</h1>
<form method="POST"> <!--tried adding action="" as well-->
<input name="item_text" id="id_new_item" placeholder="Enter a to-do list item" />
{% csrf_token %}
</form>
<table id="id_table">
<tr><td>{{ new_item_text }}</td></tr>
</table>
</body>
</html>
のURL:
は、ここに私のコードです。 py
from django.conf.urls import url
from django.contrib import admin
from lists import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home_page, name='home')
]
settings.py
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
from lists.models import Item
def home_page(request):
if request.method == 'POST':
Item.objects.create(text=request.POST['item_text'])
return redirect('/')
items = Item.objects.all()
return render(request, 'lists/home.html', {'items': items}, {})
models.py
from django.db import models
class Item(models.Model):
text = models.TextField(default='')
を使用して... recomendationはあなたのPOST値を検証するためにforms.py使用です。 – eddwinpaz
はビュー上で 'csrf_exempt()'デコレータを使うので、csrfトークンなしで動作します。これは非常に危険であり、運用環境ではこれを使用しないでください。あなたが立ち往生しているので、これはあなたを助けるかもしれません。これは一時的な解決策です – Stack
ブラウザの開発者ツールでGETリクエストとPOSTリクエストのヘッダをチェックした場合、 'Cookie:token ='の 'csrftoken'は同じですか?それは同じでなければなりません。同じでない場合、セッションは要求間で変更されます。変更しないでください。 –
Borut