У меня есть простой код, где я делаю код POST
для URL-адреса в Django
с включенным токеном CSRF. Когда я вставляю код в шаблон в пределах <script>
тегов, он отлично работает, однако, как только я перемещаю код в статический файл, я получаю ответ HTTP 403. Это странно!Django: AJAX + CSRF POST дает 403
Вот код:
$(document).ready(function() {
$(".like-button").click(function(event) {
$.ajax({
url: <relative path of URL>,
type: "POST",
data: {
csrfmiddlewaretoken: "{{ csrf_token }}",
// other data items
},
success: function(data, textStatus, jqXHR) {},
error: function(jqXHR, textStatus, errorThrown) {}
});
// other javascript code to toggle like button class
});
});
Вот как я включаю статический файл в Django
шаблона:
{% block javascript %}
{% load static %}
<script type="text/javascript" src="{% static 'app/app.js' %}"></script>
{% endblock %}
Файл находится в статическом каталоге:
app
├── static
│ └── app
│ └── app.js
и статические настройки:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Заметь, я не STATICFILE_DIRS
в настройках еще. Я могу проверить, что файл загружается и выполняется, поскольку операторы console.log()
работают отлично. Тем не менее, я получаю запрос HTTP 403 по адресу POST
.
Проверьте разрешения вашего статического файла. Сделайте его weserver удобочитаемым (разрешение 666 для теста) и повторите попытку. – Jand
@ Randi: Я сделал chmod 666, и это не помогает. – abhinavkulkarni
Затем убедитесь, что 'STATIC_ROOT' и' STATICFILES_DIRS' правильно установлены в ваши settings.py. И не забудьте запустить команду 'manage.py collectstatic', если вы находитесь в разработке. Это также поможет, если вы укажете точное сообщение об ошибке и структуру вашего файла. – Jand