4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Django csrf_token の値生成がされずにハマる、解決

Last updated at Posted at 2017-10-06

始めてみました

ググりながらフォームからの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関数を使用することで意図した結果となった。

さいごに

ググるのも良いけど、やはり本家の原文ドキュメントをちゃんと読まねばいかんですね…。

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?