Skip to content
Web-application "AskMe" like "Stack Overflow"
Python HTML JavaScript Other
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
askme
deploy
media/static/default
question
static
templates/question
.gitignore
README.md
manage.py
requirements.txt

README.md

AskMe

Задание - разработать проект «Вопросы и Ответы». Этот сервис позволит пользователям Интернета задавать вопросы и получать на них ответы. Возможности комментирования и голосования формируют сообщество и позволяет пользователям активно помогать другим. В качестве образца реализации рекомендуется использовать Stack Overflow.

Основные сущности

  • Пользователь – электронная почта, никнейм, пароль, аватарка, дата регистрации, рейтинг.
  • Вопрос – заголовок, содержание, автор, дата создания, теги, рейтинг.
  • Ответ – содержание, автор, дата написания, флаг правильного ответа, рейтинг.
  • Тег – слово тега.

Основные страницы и формы

  1. Листинг вопросов с пагинацией по 20 вопросов на странице. Необходимо реализовать сортировку по дате добавления и рейтингу (2 вида сортировки). В шапке сайта находятся: логотип, поисковая строка (для быстрого поиска по заголовку и содержимому вопроса), кнопка задать вопрос (доступна только авторизованным). В правой части шапки - юзерблок. Для авторизованного пользователя юзерблок содержит его ник, аватарку, ссылки на “выход” и на страницу с его профилем. Для неавторизованных - ссылки “войти” и “регистрация”. В правой колонке - информационные блоки “Популярные тэги” и “Лучшие пользователи” (описание ниже). Во всех листингах присутствуют кнопки “лайк/дизлайк”, позволяющие менять рейтинг вопроса.

Листинг вопросов

  1. Страница добавления вопроса (можно сделать оверлеем). Доступна только для авторизованных пользователей. В форма вводится заголовок, текст вопроса и теги, через запятую. С вопросом может быть связано не более 3 тегов. Для подсказки при выборе тега можно использовать готовый jquery плагин. Готовые django приложения для тегов использовать запрещается. При обработке формы обязательно проверка валидности данных. Если вопрос успешно добавлен - пользователя перебрасывает на страницу вопроса, если возникли ошибки - их нужно отобразить в форме.

Страница добавления вопроса

  1. Страница вопроса со списком ответов. На странице вопроса можно добавить ответ. Ответы сортируются по рейтингу и дате добавления при равном рейтинге. Ответы разбиваются по 30 штук на странице. Форма добавления ответа находится на странице вопроса. Отображается только для авторизованных пользователей. После добавления ответа, автор вопроса должен получить email с уведомление от новом ответе. В этом письме должна быть ссылка для перехода на страницу вопроса. Автор вопроса может пометить один из ответов как правильный. Пользователи могут голосовать за вопросы и ответы с помощью лайков «+» или «–». Один пользователь может голосовать за 1 вопрос и ответ только 1 раз, однако может отменить свой выбор или переголосовать неограниченное число раз.

Страница вопроса со списком ответов

  1. Листинг вопросов по тегу. На этой странице выводятся все вопросы содержащие некоторый тег. Сортировка по рейтингу вопроса. Пагинация по 20 вопросов. Пользователи попадают на эту страницу кликая по одному из тегов в описании вопроса.

Листинг вопросов по тэгу

  1. Страница пользователя содержит его настройки - email, nick и аватарку. Каждый пользователь может смотреть только свою страницу. У пользователя должна быть возможность изменить email, nick и аватарку.

Страница пользователя

  1. Форма авторизации. Состоит из поля логин и пароль. Дополнительно есть ссылка на форму регистрации. При успешной авторизации пользователь перебрасывается на исходную страницу, при неуспешной авторизации в форме выводятся сообщения об ошибках формы. Для авторизованных пользователей вместо этой формы должна показываться кнопка “Выйти”.

Форма авторизации

  1. Страница регистрации. Любой пользователь может зарегистрироваться на сайте, заполнив форму с электронной почтой, никнеймом, аватаркой и паролем. Аватарка загружается на сервер и отображается рядом с вопросами и ответами пользователя. При неудачной регистрации в форме необходимо выводить сообщения об ошибках.

Страница регистрации

  1. Блок популярных тегов. В правой колонке сайте находится облако из 20 наиболее популярных тегов. Популярными считаются те теги, которые были использованы в наибольшем количестве вопросов. Генерация этого блока занимает много времени, поэтому этот блок необходимо генерировать в фоне, с помощью cron скрипта.

  2. Блок лучших пользователи (недели). В блок лучшие пользователи попадают 10 авторов задавших самые популярные вопросы или ответы за последнюю неделю. Т.е. вопросы и ответы, созданные за последнюю неделю сортируем по рейтингу. Выбираем топ N, их авторы и будут “лучшими”. Генерация этого блока занимает много времени, поэтому блок нужно подготавливать в фоне, с помощью cron скрипта.

Требования к проекту

  1. Структура проекта должна быть понятна пользователям. Переходы по страницам осуществляются по ссылкам. Обработка форм должна осуществляться с редиректом.
  2. Код проекта должен быть аккуратным и без дублирования. Наличие больших повторяющихся фрагментов кода или шаблонов могут быть причиной снижения баллов.
  3. Верстка проекта должна быть выполнена с помощью css фреймворка Twitter Bootstrap.
  4. Код приложения должен быть чувствителен к входным данным и выдавать соответствующие коды и тексты ошибок. Сообщение пользователям «Вопрос добавлен», «Вопрос не был добавлен, потому что» выводятся в оверлее. Ответ сервера с кодом 500 может быть причиной снижения баллов.
  5. Время генерации страницы не должно зависеть от объема данных в базе.
  6. Страницы проекты не должны отдаваться более 1 секунды.

How to deploy

PostgreSQL:

$ sudo apt-get -y update
$ sudo apt-get install -y postgresql && \
                postgresql-contrib && \
                python-psycopg2 && \
                libpq-dev 

$ sudo -u postgres psql -f CREATE DATABASE askme; \
                           CREATE USER askme_admin WITH password '12345'; \
                           GRANT ALL privileges ON DATABASE askme TO askme_admin;

Django app:

$ cd ~
$ git clone https://github.com/chahkiev/AskMe.git
$ cd AskMe/
$ python3 -mvenv venv
$ source venv/bin/activate
$ pip3 install -r requirements.txt
$ python3 manage.py makemigrations
$ python3 manage.py makemigrations question
$ python3 manage.py migrate
$ python3 manage.py runserver

OR:

$ cd ~
$ git clone https://github.com/chahkiev/AskMe.git
$ cd AskMe/deploy
$ bash ./createDB.sh
$ bash ./runApp.sh

Стек технологий:

  • Python3;
  • Django - фреймворк на языке Python;
  • PostgreSQL - база данных;
  • Github – репозиторий для кода.
You can’t perform that action at this time.