Coder Social home page Coder Social logo

photo_social_net's Introduction

Social network (python3.6, flask-0.12.2, sqlalchemy-1.1.14)

Движок социальной сети

Неспешно развиваемый движок на фреймворке Flask, задействующий sqlalchemy, babel, google-captcha, ajax, qjuery, html5 (audio), оформленный в виде wsgi приложения и пригодный для запуска на серверах приложений uwsgi, gunicorn, tornado. Движок предназначен для развертывания в небольших корпоративных сетях, обладает всеми современными возможностями и позволяет пользователям регистрироваться, редактировать свой профиль, находить друзей, обмениваться сообщениями и файлами. Исключительной особенностью является фото-направленность - имеется не просто возможность добавлять собственные фотогалереи с коментариями и тегами, но также глобальный поиск среди общедоступных фотографий других пользователей по фильтру: модель камеры, теги, размер фото и другим. Фотолюбителю предоставлена возможность хранить на сервере полноразмерные фотографии и легко каталогизировать свой материал. Имеется возможность множественного добавления фотографий одним кликом и редактирование сообщений (удаление-добавление новых файлов).

Фронтенд не отличается богатством, но использует базовые принципы верстки с использованием http/css/js стека.

Установка:

Используя docker:

  1. Создаем сеть.
    docker network create photo_social_net
    
  2. Установка mysql и запуск инстанса для приложения.
    docker pull mysql:5.7
    docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=webportal -e MYSQL_USER=flask -e MYSQL_PASSWORD=difficult -d -p 3306:3306 --network=photo_social_net -v /your/db/storage:/var/lib/mysql mysql --character-set-server=utf8 --collation-server=utf8_general_ci
    ./db_create
    

Известные проблемы MAC OS: wand может жаловаться на imagemagic, быстрофикс: brew install imagemagick@6 export MAGICK_HOME=/usr/local/opt/imagemagick@6 MySQL с версии 8.0 поменяли способ аутентификации и алхимия может кидать исключение: Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found Workaround - продолжать использовать mysql 5.7 (или не использовать mysql вообще, что лучше).

  1. Деплоймент и запуск приложения.
    docker build -t photo_social .
    docker run --name webapp -d -p80:80 -e DB_IP=mysql --network=photo_social_net -v ~/your/upload/storage:/app/user_upload photo_social
    

Готово! Nginx+uwsgi+flask ждут тебя на localhost:80

Более подробное описание смотри в родительских образах:

  1. https://github.com/tiangolo/uwsgi-nginx-flask-docker
  2. https://hub.docker.com/r/tiangolo/uwsgi-nginx/

NB: после запуска контейнера с mysql разумеется нужно посмотреть его адрес (docker inspect mysql) и вбить его в конфиг приложения перед созданием образа. В дальейших PR, возможно, появится docker-compose.

Движок прошел тестирование и не имеет серьезных логических ошибок, а также видимых дыр в безопасности. В учетных записях используется досессинная модель ввиду простоты, поэтому берегите ваши кукис-файлы xD

Быстрый деплоймент может стать непростой задачей ввиду наличия множества питон-плагинов. Перед запуском необходимо создать и настроить базу данных (автор использует mysql, но склалхеми не накладывает ограничений и вы можете использовать другую), далее запустить скрипт генерации таблиц из моделей.

Ниже приведены скриншоты развернутого приложения на домашнем нетбуке: Домашняя страница пользователя. Сюда вы попадаете после регистрации и логина. Здесь вы и другие пользователи могут оставлять сообщения на своей стене, коментировать сообщения, делиться файлами. home page

Страница редакторования личных данных. В отличие от многих социальных сетей кнопка "удалить профиль" действительно удаляет профиль, рекурсивно, т.е. все сообщения-коментарии и вами загруженные на сервер файлы. edit info

К каждому сообщению можно прикреплять файлы и фотографии, фотографии можно просмотреть в циклическом порядке, используя кнопки навигации. view image

Галереи пользователя содержат фотографии, которые можно упорядочить по тегам и присвоить красивое описание. view gallery

Личные сообщения используют принципы безопасности, исключен доступ к вашим личным сообщениям другими пользователями, просмотр личных файлов и фотографий. Удаление сообщения с одной стороны исключают показ сообщения, удаление с двух сторон запускают удаление сообщения и файлов с сервера. view pm

Просмотр списка друзей. Друзья подразумевают собой отображение изменений их данных, добавление фото и сообщений на стене в вашей ленте новостей. friend list

Уникальная возможность для движков социальной сети - глобальный поиск загруженных на сервер по фильтру. Работает благодаря тому, что при загрузке фотографии сохраняется информация из exif. Теперь вы можете легко найти нужную фотографию, а также сравнить две или несколько камер по качеству съемки. image search

Автор настоятельно рекомендует использовать сервер приложений uwsgi и проксирующий nginx для раздачи статики (и конечно же linux-based дистрибутив). Все страницы даже на сверхслабом железе (домашнем нетбуке Asus Eeepc) без кеширующего прокси рендерятся за приемлемые 200-500мс, ajax позволяет существенно сократить нагрузку, запросы к orm оптимизированы и сокращены до минимума.

Дальнейшая разработка будет направлена на вынесение api для запуска websocket-сервера с существующими моделями, а также подготовке для этого фронтенда и доведение дизайна до человечески-приемлемого общепринятого стандарта.

По всем вопросам, включая поддержку, разработку и деплоймент обращаться к автору. Контакты tg: @jerunman, jabber: [email protected], email: [email protected], vk: vk.com/j3ntry Любая поддержка, багрепорты и PR будут приняты с благодарностью.

photo_social_net's People

Contributors

jejefferson avatar

Stargazers

 avatar Oleh Luzhniak avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.