Отправление одного запроса на JS в проекте Django
Разрабатываю проект на Django. У меня обрабатывается очень много запросов, 70 в секунду, т.к, у меня 7 элементов. Мне нужно их существенно сократить, чтобы не нагружать трафик. Перед тем, как сделать WebSocket, решила разобраться с этой ситуацией.
Был вариант вызывать каждый элемент из списка, вот они:
actions = {'MainLight': 'V21',
'Candles': 'V22',
'LineLight': 'V23',
'Blinds': 'V10',
'Temp': 'V31',
'Hum': 'V32',
'Light': 'V33'
}
И что-то с ними делать. Не знаю, как это реализовать.
Вот мой кусок кода на JS, если он конечно чем-то поможет...
setInterval(function() {
$.each($('.command'), function (e) {
var currentElement = $(this);
$.ajax({
type: "GET",
url: "/info",
async: true,
cache: false,
timeout: 500,
data: {action: currentElement.attr('id')},
success: function (data) {
if (data == '0') {
currentElement.removeClass("btn-warning");
currentElement.addClass("btn-primary");
} else {
currentElement.addClass("btn-warning");
currentElement.removeClass("btn-primary");
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
});
$.each($('.info'), function (e) {
var currentElement = $(this);
$.ajax({
type: "GET",
url: "/info",
async: true,
cache: false,
timeout: 500,
data: {action: currentElement.attr('id')},
success: function (data) {
currentElement.text(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
});
}, 1000);
})
И то что нашла на просторах интернета, но оно либо мне не нужно, либо я не правильно это применяю.
def filter(request):
if request.GET:
filter = request.GET.get('filter')
decoded_filter = json.loads(filter) # из строки инициализирует объект
stations = Station.objects.all()
stations_out = []
for elem in stations:
stations_out.append({}) #создаем нужный объект
id_net = Net.objects.filter(name=decoded_filter["net"])
list_id_stations = Networkstations.objects.filter(idnet__in=id_net).values_list("idstation", flat=True)
list_name_net = []
if decoded_filter["net"] != 'all':
stations = stations.filter(id__in=list_id_stations)
if decoded_filter["type"] != 'all':
stations = stations.filter(type=decoded_filter["type"])
for station in stations:
list_name_net.append(
list(Networkstations.objects.filter(idstation=station.id).values('idnet__name')))
ctx = {
'stations': stations_out,
'list_name_net': list_name_net,
}
return JsonResponse(ctx, safe=False)
Ответы (1 шт):
сформулируйте свой вопрос более корректно. Из того что я понял, вы пытаетесь отослать все id дочерних элементов класса .command и .info и обработать их в Django.
В вашей функции filter в строчке filter = request.GET.get('filter') вы пытаетесь получить GET параметр с ключом filter, хотя в двух AJAX запросах отсылается GET параметр с ключом action и поскольку такого ключа нету в GET запросе, то в переменную filter, у вас помещается None и в следующей строчке вы пытаетесь десериализавать этот None, это уже должно приводить к ошибке.
id_net = Net.objects.filter(name=decoded_filter["net"])
list_id_stations = Networkstations.objects.filter(idnet__in=id_net).values_list("idstation", flat=True)
Здесь, вы пытаетесь, сначала получить значения по несуществующему ключу net, а затем отфильтровать поле idnet по экземпляру класса QuerySet, что опять же должно приводит к ошибке. Если вы хотите отфильтровать поля таким образом, то вам нужно сделать так:
id_net = Net.objects.filter(name=decoded_filter["net"])
for id in id_net:
Networkstations.objects.filter(**{'idnet__in':id.some_field}).values_list("idstation", flat=True)
if decoded_filter["net"] != 'all':
stations = stations.filter(id__in=list_id_stations)
if decoded_filter["type"] != 'all':
stations = stations.filter(type=decoded_filter["type"])
for station in stations:
list_name_net.append(
list(Networkstations.objects.filter(idstation=station.id).values('idnet__name')))
Затем вы совершаете такую же ошибку, пытаясь отфильтровать поле id по экземпляру класса QuerySet, получить значение по несуществующему ключу decoded_filter["type"], что опять же приводит к ошибке.
Подведем итоги. Я склоняюсь к выводу, что вы скопировали откуда-то код Django, а JS писали сами и поэтому у вас ничего не получилось. Я могу лишь посоветовать вам почитать документацию по filter и полную документацию по Django, либо покажите полный JS и полный Django код из которого был показан этот кусок, что бы хоть как-то вам помочь.