Как обработать ajax запрос в django cbv? Переписываю проект на классы. Нужно обработать ajax запрос, вообще не понимаю как это сделать, нужно ли писать миксин или же создавать отдельный класс. Вот код, который был написан на функциях.if request.is_ajax():
if request.GET.get('value'):
x = int(request.GET.get('value'))
thread_ajax = Thread.objects.filter(board=Board.objects.get(board_shortcut=
name_board)).order_by('-thread_score')
if x + 5 > len(thread_ajax):
thread_ajax = thread_ajax[x:len(thread_ajax)]
else:
thread_ajax = thread_ajax[x:x + 5]
comment_ajax = []
for x in thread_ajax:
if Comment.objects.filter(thread=x).count() > 3:
section = Comment.objects.filter(thread=x).count() - 3
else:
section = 0
if Comment.objects.filter(thread=x)[section:].count() != 0:
Not_QuerySet = list(Comment.objects.filter(thread=x)[section:])
comment_ajax.extend(Not_QuerySet)
all = list(thread_ajax) + list(comment_ajax)
data = serializers.serialize('json', all)
return HttpResponse(data, content_type='application/json')
В гугле нашел ток ajax формы, но честно говоря, это ни на шаг не приблизило меня к цели.

21 Авг 2019 в 07:02
196 +1
1
Ответы
1

Для обработки Ajax запросов в Django CBV (Class-based views) Вам необходимо создать класс, который будет наследоваться от View. В этом классе нужно определить метод get для обработки GET запросов.

Примерно ваш код на функциях можно переписать на классы следующим образом:

from django.http import JsonResponse
from django.views.generic import View
from .models import Thread, Board, Comment
class AjaxView(View):
def get(self, request):
if request.is_ajax() and request.GET.get('value'):
x = int(request.GET.get('value'))
thread_ajax = Thread.objects.filter(board=Board.objects.get(board_shortcut=name_board)).order_by('-thread_score')
if x + 5 > len(thread_ajax):
thread_ajax = thread_ajax[x:len(thread_ajax)]
else:
thread_ajax = thread_ajax[x:x + 5]
comment_ajax = []
for thread in thread_ajax:
if Comment.objects.filter(thread=thread).count() > 3:
section = Comment.objects.filter(thread=thread).count() - 3
else:
section = 0
comments = Comment.objects.filter(thread=thread)[section:]
if comments:
comment_ajax.extend(list(comments))
data = list(thread_ajax) + comment_ajax
return JsonResponse(data, safe=False)
return JsonResponse({"error": "Not a valid AJAX request"}, status=400)

Вы можете создать отдельный URL-шаблон для этого класса и указать его в urls.py:

from django.urls import path
from .views import AjaxView
urlpatterns = [
path('ajax/', AjaxView.as_view(), name='ajax_view'),
]

Теперь ваш класс AjaxView будет обрабатывать AJAX-запросы и возвращать данные в формате JSON. Не забудьте также импортировать необходимые модели в вашем файле views.py.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 654 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир