Сайт по подбору квартир. Часть проекта Flats, в который также входят FlatsScrapper - сервис по сбору информации с сайтов застройщиков и наполнению базы данных. FlatsTelegramBot - позволяет получать информацию о квартирах в мессенджере Telegram.
Данный проект написан на Django. Реализован просмотр квартир в виде таблиц, с сортировкой по жилым комплексам.
На сайте можно зарегистрироваться и после подтверждения e-mail получать на почту уведомления об изменении цены или статуса
по выбранным квартирам.
Настроено логирование и кэширование, отправка писем администратору об ошибках на сайте, оптимизированы ORM запросы,
написан фильтр и middlewares для пополнения контекста шаблона и обработки исключений.
Письма отправляются с использованием Celery.
Весь функционал сайта также доступен через REST API, которое разработано с применением Django REST framework.
Написан docker-compose.yml
который упаковывает и запускает приложение в контейнере используя Nginx + Gunicorn.
При разработке приложения использованы следующие основные пакеты, фреймворки и технологии:
Django;
Django REST framework;
Celery;
Django Simple Captcha;
Django Debug Toolbar;
Bootstrap;
Docker.
Полный список в фале requirements.txt
.
Базы данных PostgreSQL и Redis в качестве брокера сообщений для Celery.
Projects - таблица с информацией о жилых комплексах.
project_id - уникальный идентификатор, совпадает с id застройщика.
city - город.
name - название ЖК.
url - URL адрес ЖК на сайте застройщика.
metro - ближайшее метро.
time_to_metro - расстояние пешком до метро.
latitude - координаты ЖК, широта.
longitude - координаты ЖК, долгота.
address - адрес ЖК.
data_created - дата добавления ЖК в базу данных.
data_closed - дата снятия ЖК с продажи.
Flats - таблица с информацией о Квартирах.
flat_id - уникальный идентификатор, совпадает с id застройщика.
address - адрес квартиры.
floor - этаж.
rooms - количество комнат.
area - площадь.
finishing - с отделкой?.
settlement_date - дата заселения.
url_suffix - продолжение URL к адресу ЖК.
data_created - дата добавления квартиры в базу данных.
data_closed - дата снятия квартиры с продажи. project - проект к которому принадлежит квартира, связь один со многими.
Prices - таблица с информацией о ценах на Квартиру.
price_id - уникальный идентификатор,
benefit_name - ценовое предложение.
benefit_description - описание ценового предложения.
price - цена.
meter_price - цена за метр.
booking_status - статус бронирования.
data_created - дата добавления записи в базу данных.
flat - проект к которому принадлежит квартира, связь один со многими.
На уровне базы данных таблица AllFlatsLastPrice реализована в виде представления (VIEW). Возвращает последнюю запись по квартире (последнее изменение по цене или статусу квартиры).
AllFlatsLastPrice - таблица с информацией о ценах на Квартиру.
flat_id - уникальный идентификатор, совпадает с id застройщика.
address - адрес квартиры.
floor - этаж.
rooms - количество комнат.
area - площадь.
finishing - с отделкой?.
settlement_date - дата заселения.
url_suffix - продолжение URL к адресу ЖК.
project_id - уникальный идентификатор, совпадает с id застройщика.
city - город.
name - название ЖК.
url - URL адрес ЖК на сайте застройщика.
price - цена.
booking_status - статус бронирования.
SQL для создания таблицы AllFlatsLastPrice:
CREATE VIEW all_flats_last_price AS
SELECT flats.flat_id, flats.address, flats.floor, flats.rooms, flats.area, flats.finishing, flats.settlement_date, flats.url_suffix,
projects.project_id, projects.name, projects.city, projects.url,
prices.price, prices.booking_status
FROM flats
INNER JOIN projects ON flats.project_id = projects.project_id
INNER JOIN prices ON prices.flat_id = flats.flat_id
INNER JOIN (
SELECT flat_id, max(data_created) AS max_data
FROM prices
GROUP BY flat_id
) AS last_price ON last_price.flat_id = prices.flat_id
WHERE prices.data_created = last_price.max_data;
Приложение написано на Python v.3.11.
Скачайте FlatsWebsite на Ваше устройство любым удобным способом (например Code -> Download ZIP, распакуйте архив
или выполните git clone https://github.com/darkus007/FlatsWebsite.git
).
Установите Docker, если он у Вас еще не установлен.
Откройте файл .env
и измените значения переменных окружения на свои:
SECRET_KEY
- секретный ключ Django;
DJANGO_SUPERUSER_PASSWORD
- пароль супер пользователя;
DJANGO_SUPERUSER_EMAIL
- email супер пользователя;
DJANGO_SUPERUSER_USERNAME
- login супер пользователя;
POSTGRES_DB
- название базы данных (совпадает с POSTGRES_DB
файла docker-compose.yml
);
POSTGRES_USER
- пользователь базы данных (совпадает с POSTGRES_USER
файла docker-compose.yml
);
POSTGRES_PASSWORD
- пароль пользователя базы данных (совпадает с POSTGRES_PASSWORD
файла docker-compose.yml
);
DEFAULT_FROM_EMAIL
- адрес отправителя по умолчанию (от кого придет письмо пользователю).
Настройки почты, зависят от Вашего провайдера, эти настройки Вы можете получить у него:
EMAIL_HOST
- хост;
EMAIL_PORT
- порт;
EMAIL_HOST_USER
- пользователь;
EMAIL_HOST_PASSWORD
- пароль.
!!! Приложение запустится без корректировки и изменения указанных в данном разделе настроек, для теста можно их оставить без изменений !!!
Откройте терминал, перейдите в каталог с приложением (cd <путь к приложению>/FlatsWebsite
).
Выполните команду docker-compose up -d --build
. Дождитесь сборки и запуска контейнеров.
Выполните скрипт . ./create_sql_view.bash
он создаст представление all_flats_last_price
в контейнере, необходимое для работы приложения.
(При необходимости дайте скрипту права на запуск выполнив sudo chmod +x create_sql_view.bash
).
Откройте любимый Веб-браузер и перейдите по адресу http://127.0.0.1/