Skip to content

Latest commit

 

History

History
27 lines (19 loc) · 4.2 KB

task-5.md

File metadata and controls

27 lines (19 loc) · 4.2 KB

Домашнее задание 5

Загрузка картинок и обработка AJAX запросов

Целью домашнего задания является добавления функционала аватарок (загрузка картинок) и обработка AJAX запросов (лайки).

1. Загрузка картинок

Для хранения картинок нужно использовать встроенные инструменты Django, а именно django.db.models.ImageField для хранения URL картинки в модели и django.forms.ImageField для описания поля в форме. Django хранит загруженные файлы на диске в директории settings.MEDIA_ROOT. В нашем случае в настройке settings.MEDIA_URL и в конфиге nginx должен быть прописать путь к директории uploads вашего проекте. Для отображения аватарки пользователя достаточно будет вставить в тег img src="{{ MEDIA_URL }}{{ user.avatar }}".

2. Необходимыe AJAX запросы

  • Лайк (дизлайк) вопроса. На сервер передаются параметры: id вопроса, тип (лайк / дизлайк). Возвращается: новый рейтинг вопроса или код ошибки.
  • Галочка правильный ответ. На сервер передается ID вопроса и ID правильного ответа. Необходимо проверить что только автор вопроса может выбирать правильный ответ.

3. Обработка AJAX запросов

Так как отображение ошибок при AJAX запросах затруднительно, желательно не дать (на уровне интерфейса) возможности пользователю делать неправильные запросы. Например, если пользователь уже лайкал данный вопрос - то скрыть или отключить кнопку лайка. Скрыть выбор правильного ответа для не авторов.

В отличие от остальных страниц, в ответ на AJAX запрос сервер должен возвращать JSON документ. Для этого необходимо создавать объект django.http.HttpResponse самостоятельно с Content-Type: 'application/json' и соответсвующим телом ответа, либо воспользоваться вспомогательным объектом django.http.JsonResponse.

Для отправки AJAX запросов в браузере можно использовать jQuery, воспользовавшись каким-либо туториалом. Необходимо учесть, что Django ожидает получить с каждым запросом csrf_token, поэтому необходимо добавить его данные каждого AJAX запроса.

4. Полезные ссылки