Целью домашнего задания является добавления функционала аватарок (загрузка картинок) и обработка AJAX запросов (лайки).
Для хранения картинок нужно использовать встроенные инструменты Django, а именно django.db.models.ImageField для хранения URL картинки в модели и django.forms.ImageField для описания поля в форме. Django хранит загруженные файлы на диске в директории settings.MEDIA_ROOT. В нашем случае в настройке settings.MEDIA_URL и в конфиге nginx должен быть прописать путь к директории media вашего проекте. Для отображения аватарки пользователя достаточно будет вставить в тег <img src="{{ MEDIA_URL }}{{ user.avatar }}">.
- Лайк (дизлайк) вопроса. На сервер передаются параметры: id вопроса, тип (лайк / дизлайк). Возвращается: новый рейтинг вопроса или код ошибки.
- Галочка правильный ответ. На сервер передается ID вопроса и ID правильного ответа. Необходимо проверить что только автор вопроса может выбирать правильный ответ.
Так как отображение ошибок при AJAX запросах затруднительно, желательно не дать (на уровне интерфейса) возможности пользователю делать неправильные запросы. Например, если пользователь уже лайкал данный вопрос - то скрыть или отключить кнопку лайка. Скрыть выбор правильного ответа для не авторов.
В отличие от остальных страниц, в ответ на AJAX запрос сервер должен возвращать JSON документ. Для этого необходимо создавать объект django.http.HttpResponse самостоятельно с Content-Type: application/json и соответсвующим телом ответа, либо воспользоваться вспомогательным объектом django.http.JsonResponse.
Для отправки AJAX запросов в браузере можно использовать jQuery. Необходимо учесть, что Django ожидает получить с каждым запросом csrf_token, поэтому необходимо добавить его в данные каждого AJAX запроса.
Загрузка и отображение аватарок пользователей - 4:
- заливка картинок в uploads - 2;
- отображение картинок из uploads - 2.
Страница редактирования профиля - 2:
- общее - 1;
- отображение ошибок - 1.
Лайки вопросов и ответов - 2:
- общее - 1;
- AJAX - 1.
Отметка “правильный ответ” - 2:
- общее - 1;
- AJAX - 1.
Проверка авторизации, csrf, метода запроса, авторства - 1.
- Документация по загрузке файлов в Django;
- Документация по работе со статическими файлам в Django;
- Неплохой туториал по связке django + jquery + ajax;
- Про CSRF в Django.