Подтвердить что ты не робот

Как я могу вставить django csrf token прямо в HTML?

в моем приложении django Я храню строки html в db, которые затем будут отображаться на домашних страницах пользователей как "сообщения". Некоторые из этих сообщений содержат формы, но не записываются на языке шаблонов, я не могу вставить токен 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)

любое другое решение, которое будет работать в подобном сценарии, было бы здорово. Благодаря

Edit: На самом деле это не работает, потому что токен отличается для каждого сеанса, поэтому его хранение в db не очень полезно. есть ли способ динамически загружать токен в представлении?

4b9b3361

Ответ 1

Вызовите django.middleware.csrf.get_token(request), чтобы получить токен CSRF.

Ответ 2

Способ его использования - использовать его непосредственно в шаблонах.

Из документация,

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

- это все, что вам нужно включить.

Ответ 3

Принятый ответ предполагает, что токен уже установлен в объекте запроса.

Может быть, что-то вроде этого лучше:

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