Т.к. я им уже не занимаюсь, а исходники пыляться более 3 месяцев, я решил залить его с bitbucket'а на github(возможно, они кому-нибудь понадобятся). Readme проект оставляю неизменным.
doSociety - новая социальная сеть, цель которой заключается в поиске потенциально интересных собеседников в максимально близком регионе.
Суть заключается в работе VK API, которая предоставляет работу с группами, музыкой и личной информацией каждого пользователя. Находя максимально близких людей по интересам(пересечениям общих групп и музыкальных исполнителей) и сортируя их по геопозиции(или исходя из личной информации), можно найти потенциально интересных собеседников, учитывая разницу в возрасте(+-5 лет).
- Возможность приватного чата с потенциально интересными и близкими собеседниками
- Возможность выбора региона для поиска собеседников(например: при переезде, появляется потребность в новых друзьях; при поступлении в вуз другого города, нужно найти новых друзей, максимально близких по твоим интересам)
- Возможность общения на базе doSociety(при добавлении этой возможности, людям не потребуется "контачиться" в других социальных сетях)
- Возможность прослушивания аудиозаписей(онлайн и оффлайн)
- Возможность добавления фотографий и видео (По мере развития, список будет продолжаться)
- Актуальность(включает в себя нужность, именно из-за этого большое внимание должно быть уделено интерфейсу поиска новых собеседников)
- Скорость(при выше всего; вся работа должно происходить "плавно" и без типичных для android-приложений "подлагиваний")
- Элементарность и простота в использовании(все дожно быть просто и ясно, чтобы человек любого возраста смог без затруднений разобраться в приложении и найти нужную ему функцию)
- Разобраться с работой VK API
- Создание шаблона будущего приложения
- Проектрирование архитектуры
- Написание сервера
- Верстка клиента
- Функционирование клиента
VK API предоставляет всю необходимую информацию для работы с группами, но 16 декабря 2016 года VK отключила поддержку Audio API(из-за монетизация ИМХО). Придется парсить аудиозаписи посредством магии PHP(со стороны сервера), для этого придется предварительно просить людей включить общий доступ к аудиозаписям(естественно не все последуют совету, но это все, что мы можем сделать в данной ситуации).
- Для узнавания определенных групп пользователя
- Для поиска каталог пользователя
- Здесь можно организовать интересующий нас поиск записей
Пытаемся найти аудиозаписи на странице,если находим, то начинаем парсить, в противном случае вешаем подсказку о необходимости открытия аудиозаписей.
В VK API для этих целей есть специальный метод, думаю, его хватит с головой.
Разработка ведется на Django(веб-фреймворк написанный на Python) и React.js(MVC написанный на JS компанией Facebook). Разработка сервера будет осуществлятся на Python.
Веб-сервер написан на Django с использованием Django-REST-Framework и Django-JWT(Json Web Token)
При любых запросах браузера сервер ведет на одну view
(Index), в котором находятся только метатеги, тайтл и подключение скриптов с css-файлами
Обработкой отображения занимается app.js
Т.е. все происходит на одной странице, это так называемая SPA
(Single Page Application)
Сделано это для того, чтобы страница не перезагружалась, т.к. мы будем подключаться к серверу(с помощью технологии websocket) один раз, передавая ему свой token и имела огромную скорость загрузки(см. постулат 2), которая реализуется с помощью виртуального DOM-дерева, при изменении которого React.js просматривает реальное DOM-дерево и изменяет минимальный кусок кода для его идентичного представления
Для получения token'а и другого рода информации(например id-пользователя, его личные переписки, настройки и доступ к данным) мы используем Django REST API
Django REST API - это фреймворк, который позволяет получать стериализованные данные(данные в формате json/или другом удобном виде)
Он имеет очень много всяких удобных параметров для настройки вывода той информации, которая удобна только нам(права доступа для отображения, поля вывода, обработка методов CRUD и т.д.)
Для получения token
'а я использовал метод obtain_jwt_token()
, который расположен по адресу '/api/token-auth/'
На вход метода POST
ему подается username(логи пользователя: email или телефон) и password(пароль)
При удачном обращении он вернет token
, который мы сохраняем в localStorage(локальное хранилище, которое чистится только при удалении браузера, в отличии от кук, которые удаляются при закрытии браузера), которое мы будем очищать только при выходе пользователя(реализованно в "Настройки")
Получения личной информации реализовано в классе DRF, унаследованного от APIView - GetUserInfo
, расположенный по адресу 'api/getuserinfo/'
Для работы клиента используется React.js
Так как сервер отравляет все запросы на одну страницу(index.html
), то обрабатывать url
страницы приходится на стороне клиента, иначе происходило бы обновление, которые мы не можем допустить(все действия должны происходить на одной странице)
Для обработки запросов используется класс Route
, которому в property path
нужно передать регулярное выражение страницы
... ниже будут отдельные пункты, которые мне показались "интересными" или то, с чем я столкнулся в процессе выполнения определенной задачи ...