куда идут функции, которые не отображаются в django

StackOverflow https://stackoverflow.com/questions/900651

  •  23-08-2019
  •  | 
  •  

Вопрос

У меня есть несколько ссылок на html-странице, например , , , в настоящее время я обрабатываю их следующим образом

<p> <a href="/cases/{{case.id}}/case_rate/-">rate down</a>

и получите url.py запись:

 (r'^cases/(?P<case_id>\d+)/case_rate/(?P<oper>.)$', 'mysite.cases.views.case_rate'),

затем у меня есть функция просмотра, которая обрабатывает логику и обращается к базе данных, затем выполняет это:

return HttpResponseRedirect(request.META.get('HTTP_REFERER','/'))

I есть ли лучший способ сделать это?Я вижу, что это было бы нормально, потому что для отображения нового рейтинга действительно нужно перерисовать экран...

Это было полезно?

Решение

Типичный способ справиться с этим - с помощью ajax-запроса.

Вместо ссылки вы помещаете обработчик javascript, который вызывает представление, которое обновляет базу данных и возвращает объект json / xml с новым рейтингом для элемента.Затем другой дескриптор javascript получает этот ответ и обновляет номер рейтинга на экране без перезагрузки страницы.

В идеале вы должны сохранить обе версии:обычный html (тот, который у вас есть в данный момент) и ajax-код.ajax-файл может быть присоединен к элементу после загрузки страницы, поэтому, если javascript недоступен, у вас все равно будет работающий сайт.

Затем, что касается организации, у вас может быть параметр "ajax" в вашем представлении.Представление должно соответствующим образом обновить базу данных, и если это вызов ajax, верните ответ json / xml, в противном случае верните новую страницу.Таким образом, вы можете сохранить логику (извлечение объекта, обновление базы данных) в одном месте.

Другие советы

Если вы спрашиваете, следует ли по-прежнему указывать case_rate в views.py учитывая, что он возвращает перенаправление, а не предоставляет контент, ответ - да, поскольку case_rate обрабатывает запрос и возвращает ответ.

Но рассмотрим ситуацию, когда у вас были две функции просмотра в views.py, в которых был некоторый дублированный код, и вы решили включить этот дублированный код в другую функцию, которая не принимала запрос и не возвращала ответ.Будет ли это честной игрой, чтобы уйти в views.py?Конечно, если бы перемещение его в другое место затруднило чтение кода.Или вы могли бы поместить его в другое место.Это действительно ваше решение, основанное на вашем чувстве вкуса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top