38

私のdjangoアプリ内で、ユーザーのホームページに「メッセージ」として表示されるhtmlの文字列をデータベースに保存しています。これらのメッセージの一部にはフォームが含まれていますが、テンプレート言語で記述されていないため、csrf トークンを挿入できません (したがって、アプリが壊れます)。

このトークンを編集中の python ファイル内から直接挿入する方法はありますか? 私は次の行に沿って何かを探しています:

csrf_token = django.csrf.generate()
message = "press the button please: <form><input type='hidden' name='csrf_token' value='%s'><input type='submit' value='press here'></form>" % (csrf_token)

同様のシナリオで機能する他のソリューションは素晴らしいでしょう。ありがとう

編集: トークンはセッションごとに異なるため、実際には機能しません。データベースに保存することはあまり役に立ちません。ビュー内でトークンを動的にロードする方法はありますか?

4

3 に答える 3

53

django.middleware.csrf.get_token(request)CSRF トークンを取得するために呼び出します。

于 2010-07-21T12:49:50.790 に答える
42

それを使用する方法、テンプレートで直接使用することです。

ドキュメントから、:

<form action="" method="post">
{% csrf_token %}

含める必要があるのはそれだけです。

于 2010-07-20T15:22:04.703 に答える
10

受け入れられた回答は、トークンがリクエストオブジェクトに既に設定されていることを前提としています。

たぶん、このようなものが良いです:

from django.middleware import csrf
def get_or_create_csrf_token(request):
    token = request.META.get('CSRF_COOKIE', None)
    if token is None:
        token = csrf._get_new_csrf_key()
        request.META['CSRF_COOKIE'] = token
    request.META['CSRF_COOKIE_USED'] = True
    return token
于 2013-09-13T08:44:58.313 に答える