Ответ 1
Вызовите django.middleware.csrf.get_token(request)
, чтобы получить токен CSRF.
в моем приложении 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 не очень полезно. есть ли способ динамически загружать токен в представлении?
Вызовите django.middleware.csrf.get_token(request)
, чтобы получить токен CSRF.
Способ его использования - использовать его непосредственно в шаблонах.
Из документация,
<form action="" method="post">
{% csrf_token %}
- это все, что вам нужно включить.
Принятый ответ предполагает, что токен уже установлен в объекте запроса.
Может быть, что-то вроде этого лучше:
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