Как заставить кнопку отправлять данные в функцию django с помощью ajax
Я пытаюсь создать html-кнопку, которая получает данные со страницы и отправляет их в функцию django. Кнопка не связана с формой или чем-либо еще. Я относительно новичок в django и я пробовал миллиард различных подходов к этой проблеме без успеха. Любые предложения будут очень признательны.
Первый и самый простой шаг для этого - сначала создать новое приложение под названием ajax и добавить его в приложения, установленные в настройках Django.
Перейдите к project_name/urls.py и включите ajax в отдельный адрес:
urlpatterns = [
...,
path('ajax/', include('ajax.urls')),
]
Затем создайте файл urls.py в ajax и напишите его в качестве примера:
from django.urls import path
from . import views
app_name = 'ajax'
urlpatterns = [
path('First', views.FirstAjax, name='First'),
]
Переменная app_name записана, потому что она предотвращает жесткий код.
Перейдите в ajax/views.py и создайте новое представление под названием FirstAjax:
from django.http.response import HttpResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def FirstAjax(request):
text = request.POST['text']
return HttpResponse('All Done!')
Почти все отлично! Если вы хотите писать ajax методом POST, вам нужно установить декоратор csrf_exempt, чтобы Django не реагировал на CSRF-токены. Но если вы хотите сделать это методом GET, вам не нужен этот декоратор.
Теперь вы можете использовать Ajax, добавив JQuery в проект:
Простой пример:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<h2 id="myheader">My template</h2>
<button onclick="Ajax()">Click me!</button>
<script>
function Ajax() {
$.post("{% url 'ajax:First' %}", {text:'Hello, Ajax!'}, function(response){
console.log('Done');
});
}
</script>
</body>
</html>
Надеюсь, этот небольшой пример помог вам и другим людям.