В последних Django для предотвращения атак предусмотрены токена при передачи данных методом POST. Что-то типа:
def main_init ( request ) :
dimention_to_template = {} # словарь, для передачи шаблону
dimention_to_template.update( { 'data': 100 } )
dimention_to_template.update( csrf(request) ) # токен, для метода POST
response = render ( request, "index.html", dimention_to_template )
return response
Соответственно в шаблоне пишем, что-то типа:
<form action="get_address" method="post">
{% csrf_token %}
<input type="text" name="addr" value="Город, улица, дом" />
<button type="submit">Найти</button>
</form>
И все работает.
Но вот если событие "submit" в форме обрабатывает JavaScript (например, если нужно динамическое обновление страниц), то передача токена не происходит. Что вызывает 403 ошибку. То есть например, если у нас в шаблоне:
<form id="input_address">
<div id="box">
{% csrf_token %}
<input type="text" name="addr" value="Город, улица, дом" id="address" />
<button type="submit">Найти</button>
</div>
</form>
И есть скрипт, обеспечивающий submit и перегружающий контент в блоке "box":
<script type="text/javascript">
$(document).ready(function(){
$('#input_address').submit(function(){
$.ajax({
type: "POST",
url: "get_address",
data: "address="+$("#address").val(),
success: function(html){
$("#box").html(html);
}
});
return false;
});
});
</script>
То, естественно, токен не отправляется и возникает ошибка 403. Задача отправить токен через JavaScript/ Только как это сделать? Ведь он формируется Django... Как его спросить что там в токене переодается и как на самом деле этот токен обзывается?