始めてみました
ググりながらフォームからのPOSTを作成してみようと思い、Viewを作成するもローカル環境 runserver
で上手く動かない…。
どうやら現行バージョンまでの間に仕様変更に伴い、古い情報(?)を読んでいたためか、実行時にRaiseしたり、csrf_tokenが生成されない、などでハマる。
(1日目ということもあり、現行バージョンまでに起きた仕様変更に関連する情報はまだ十分につかめていない。)
環境
- macOS El Capitan / Homebrew+pyenv
- Django Version: 1.11.6
- Python Version: 3.6.0
やらなければならないこと
いくつかのステップを踏む必要があるらしい
テンプレートHTML
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="" method="post">{% csrf_token %}
<table>
{{form.as_table}}
<tr><td colspan='2'><input type="submit" value="Submit"></td></tr>
</table>
</form>
</body>
</html>
{% csrf_token %}
というコードを埋め込む。
settings.py
MIDDLEWARE リスト変数に 'django.middleware.csrf.CsrfViewMiddleware'
が含まれているか確認。
views
ここが、一番ハマった箇所。
- render_to_responseを使う
- RequestContextを使う
などのサンプルがあったが、警告やTypeErrorが発生した。最終的には
def home(request):
return reder( request, 'テンプレート.html', {..コンテキスト..} )
で csrf_tokenがレスポンスのHTMLに埋め込まれた。render関数を使用することで意図した結果となった。
さいごに
ググるのも良いけど、やはり本家の原文ドキュメントをちゃんと読まねばいかんですね…。