django - disable - forbidden(csrf token missing or incorrect.) ajax
¿Cómo puedo insertar el token django csrf directamente en HTML? (3)
La forma de usarlo, es usarlo directamente en las plantillas.
De la documentación ,:
<form action="" method="post">
{% csrf_token %}
es todo lo que tienes que incluir.
Dentro de mi aplicación django, estoy almacenando cadenas de html en la base de datos que luego se mostrarán en las páginas de inicio de los usuarios como "mensajes". Algunos de estos mensajes contienen formularios, pero no se escriben en el idioma de la plantilla, no puedo insertar el token csrf (por lo tanto, se rompe la aplicación)
¿Hay alguna forma de insertar este token directamente desde los archivos de python que estoy editando? Estoy buscando algo en la línea de:
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)
Cualquier otra solución que funcione en un escenario similar sería genial. Gracias
Edición: en realidad eso no va a funcionar porque el token es diferente para cada sesión, por lo que almacenarlo en la base de datos no es muy útil. ¿Hay una manera de cargar dinámicamente el token dentro de la vista?
La respuesta aceptada asume que el token ya está establecido en el objeto de solicitud.
Tal vez algo como esto es mejor:
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
Llame a django.middleware.csrf.get_token(request)
para obtener el token CSRF.