Как вставить токен django csrf прямо в HTML?
в моем приложении 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)
любое другое решение, которое бы работать по подобному сценарию было бы здорово. Спасибо
Edit: На самом деле это не сработает, потому что токен отличается для каждого сеанса, поэтому хранить его в БД не очень полезно. есть ли способ динамически загружать токен в представлении?
3 ответов
способ его использования,и использовать его непосредственно в шаблонах.
С документация,:
<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