[解決済み] POSTメソッドは常に403 Forbiddenを返します。
2022-02-14 08:21:42
質問
私は、以下の本を読みました。 Django - CSRF 検証に失敗しました と、djangoとPOSTメソッドに関連するいくつかの質問(と回答)。私にとってベストだがうまくいかない答えの一つは https://stackoverflow.com/a/4707639/755319
承認された回答はすべて、少なくとも3つのことを示唆しています。
- render_to_response_callの3番目のパラメータとしてRequestContextを使用します。
- POSTメソッドを持つすべてのフォームに{% csrf_token %}を追加する。
- settings.pyのMIDDLEWARE_CLASSESを確認します。
提案されたとおりにしましたが、まだエラーは出ています。私は、django 1.3.1 (ubuntu 12.04 リポジトリより) と python 2.7 (ubuntuのデフォルト) を使用しています。
これは私のViewです。
# Create your views here.
from django.template import RequestContext
from django.http import HttpResponse
from django.shortcuts import render_to_response
from models import BookModel
def index(request):
return HttpResponse('Welcome to the library')
def search_form(request):
return render_to_response('library/search_form.html')
def search(request):
if request.method=='POST':
if 'q' in request.POST:
q=request.POST['q']
bookModel = BookModel.objects.filter(title__icontains=q)
result = {'books' : bookModel,}
return render_to_response('library/search.html', result, context_instance=RequestContext(request))
else:
return search_form(request)
else:
return search_form(request)
で、これが私のテンプレート(search_form.html)です。
{% extends "base.html" %}
{% block content %}
<form action="/library/search/" method="post">
{% csrf_token %}
<input type="text" name="q">
<input type="submit" value="Search">
</form>
{% endblock %}
サーバーを再起動しましたが、CSRFの検証に失敗したことを伝える403 forbiddenエラーはまだ残っています。
2つ質問があります。
- このエラーを修正する方法を教えてください。
- djangoで"POST"を作るのはなぜそんなに難しいのですか、つまり、そんなに冗長にする特別な理由があるのですか(私はPHPから来たのですが、以前にこのような問題を見つけたことはありません)?
解決方法は?
search_form ビューの render_to_response に RequestContext を入れてみてください。
context_instance=RequestContext(request)
関連
-
[解決済み] Django: TemplateSyntaxError: 余りをパースできませんでした。
-
[解決済み] Django-Rest-Framework ルータ登録
-
[解決済み] Django ランサーバー使用時にデータを印刷する方法
-
django 1.8 公式ドキュメントの翻訳です。13-3 ログ
-
[解決済み] フォーム送信のようなJavaScriptのポストリクエスト
-
[解決済み] HTTP POSTリクエストでは、どのようにパラメータが送信されるのですか?
-
[解決済み] HTTP POST Web リクエストの作成方法
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】Django: モデルフィールドのリストを取得しますか?
-
[解決済み】Djangoで一対多の関係を表現する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Django における cleaned_data の用途は?
-
[解決済み] "POSTMANを使った画像データの投稿"
-
[解決済み] django 上書きフォームクリーンメソッド
-
Pythonが表示される。TypeError: 期待される文字列またはバッファ
-
[解決済み] 正確な検索のための QuerySet 値は、スライシングを使用して 1 つの結果に制限する必要があります。フィルタ・エラー
-
[解決済み】Djangoのフォームセットにフォームを動的に追加する
-
[解決済み】Djangoで1ページで複数のフォームを扱う適切な方法
-
[解決済み】DjangoでManyToManyリレーションに複数のオブジェクトを一度に追加する方法は?
-
[解決済み】テンプレート変数をHTMLとしてレンダリングする
-
[解決済み] Django restフレームワーク、同じModelViewSetで異なるシリアライザーを使用する。