web-dev-qa-db-fra.com

Comment puis-je incorporer Django jeton CSRF directement dans HTML?

dans mon Django APP, je stocke des chaînes de HTML dans la base de données qui seront ensuite affichées sur les pages d'accueil des utilisateurs en tant que "Messages". Certains de ces messages contiennent des formulaires, mais ne sont pas écrits dans Le langage de modèle, je ne suis pas capable d'insérer le jeton CSRF (brisant ainsi l'application).

Y a-t-il un moyen d'insérer ce jeton directement à partir de python fichiers je montage? Je cherche quelque chose dans le sens 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)

toute autre solution qui fonctionnerait dans un scénario similaire serait géniale. Merci

Edit : En réalité, cela ne fonctionnera pas car le jeton est différent pour chaque session, la stocker ainsi dans la DB n'est pas très utile. Existe-t-il un moyen de charger de manière dynamique le jeton dans la vue?

30
ergelo

Call Django.middleware.csrf.get_token(request) Pour obtenir le jeton CSRF.

50
Török Gábor

Le moyen de l'utiliser est pour l'utiliser directement dans les modèles.

De - la documentation :

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

est tout ce que vous devez inclure.

25
Lakshman Prasad

La réponse acceptée suppose que le jeton est déjà défini dans l'objet de la demande.

Peut-être que quelque chose comme ça est meilleur:

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
9
Evgeny