Как обновить данные на странице без перезагрузки. Python - Django
Я начинающий разработчик на Python. Мне нужно регулярно обновлять несколько значений на странице с частотой 1 секунда. Я понимаю, что нужно использовать Ajax, но не представляю, как это сделать. Помогите написать AJAX скрипт, который вызывает определенный метод в представлении
Я написал представление
class MovingAverage(TemplateView): template_name = 'moving_average/average.html'
>def get(self, request, *args, **kwargs):
return render(request, 'moving_average/average.html')
def post(self, request, *args, **kwargs):
self.symbol = request.POST.get('symbol')
self.interval = request.POST.get('interval')
self.periods = int(request.POST.get('periods')) if request.POST.get('periods') != '' else 0
self.quantity = float(request.POST.get('quantity')) if request.POST.get('quantity') != '' else 0
self.delta = float(request.POST.get('delta').strip('%')) / 100
self.button()
return render(request, 'moving_average/average.html')
Здесь нам нужны две функции для вызова данных из AJAX:
Сначала нам нужно создать функцию представления JsonResponse в файле views.py.
# views.py
from django.http import JsonResponse
def get_some_data(request):
try:
if request.method == "POST":
get_some_data = [1, 2, 3, 4, 5] # You can run the query instead
return JsonResponse({"data": get_some_data})
else:
return JsonResponse({"error": "Invalid Method"})
except Exception as ep:
return JsonResponse({"error": str(ep)})
Создайте путь для этой функции в файле urls.py.
# urls.py
path("get-some-data/", views.get_some_data, name="get-some-data")
Теперь мы создадим некоторый AJAX вызов для получения данных без перезагрузки страницы ...
$.ajax({
type: "POST",
url: "{% url 'get-some-data' %}",
data: {
id: 2, // You can send any type of data ...
csrfmiddlewaretoken: $("input[name=csrfmiddlewaretoken]").val(), //This is important as we are making POST request, so CSRF verification is important ...
},
success: function(data) {
console.log(data); // Here you can manipulate some D.O.M. for rendering some data ...
}
})
Вот и все. Теперь вы можете идти.