Как сделать чат на python
Добавил пользователь Алексей Ф. Обновлено: 04.10.2024
Модели Chat и Message
Это был бы отличный вариант для дальнейшего развития ресурса. Но в данном случае требуется создать две модели Chat и Message .
Каждый чат имеет many-to-many связь, которая отвечает за список участников в рамках чата. Благодаря этому можно ограничить просмотр чатов, а также возможность писать в чаты, если пользователь не был приглашён в данный чат.
urls.py
Какие вьюшки нам понадобятся и какие маршруты можно сделать? Мне на реализацию данного функционала в самом простом виде понадобилось написать три вьюшки и соответственно три маршрута в urls.py.
Не будем углубляться в каком именно приложении будем использовать данные маршруты - это не принципиально.
В данном случае можно использовать форму для модели. Укажем модель, а также какие поля должны быть отображены с удалением лейбла у поля ввода.
По умолчанию у вас будет обычная textarea. Я использую свой самописный WYSIWYG редактор.
Представления и шаблоны
Отображение списка диалогов
Для получения списка всех диалогов, в которых задействован пользователь, необходимо провести фильтрацию всех чатов по участникам, то есть по Many-toMany полю members.
Наибольший интерес представляет сам список диалогов и его вёрстка, поэтому из шаблона здесь будет представлена только та часть, которая отвечает за вёрстку.
Таким образом список диалогов будет выглядеть следующим образом:
Пример получившегося диалога
Начало беседы с пользователем
Обязательно делаем проверку на количество пользователей, поскольку в личной беседе может быть только два пользователя, ну и проверяем, чтобы этими пользователями был наш авторизованный пользователей, а также пользователь с которым мы пытаемся начать беседу.
Для Django рекомендую VDS-сервера хостера Timeweb .
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
В этом уроке мы создадим простой чат-сервер. Он будет иметь две страницы:
Индексное представление, которое позволяет вам ввести имя комнаты чата, чтобы присоединиться.
Мы предполагаем, что вы знакомы с основными понятиями для создания сайта Django. Если нет, мы рекомендуем сначала ознакомиться с учебником по Django, а затем вернуться к этому учебнику.
Мы предполагаем, что у вас уже установлен Django. Вы можете узнать, какой Django установлен и какая версия установлена, выполнив следующую команду в приглашении оболочки (обозначено префиксом $ ):
Мы также предполагаем, что у вас уже есть установленый Channels . Вы можете узнать, что Channels установлены, выполнив следующую команду:
Это руководство написано для Channels 3.0, которые поддерживают Python 3.6+ и Django 2.2+. Если версия Channels не совпадает, вы можете обратиться к руководству для своей версии Channels, используя переключатель версий в нижнем левом углу этой страницы, или обновить каналы до последней версии.
В этом руководстве также используется Docker для установки и запуска Redis. Мы используем Redis в качестве резервного хранилища для слоя канала, который является необязательным компонентом библиотеки Channels, которую мы используем в руководстве. Установите Docker с официального веб-сайта - есть официальные среды выполнения для Mac OS и Windows, которые упрощают его использование, и пакеты для многих дистрибутивов Linux, где он может работать нативно.
В то время как вы можете запускать стандартный Django runserver без необходимости в Docker’е, функциям каналов, которые мы будем использовать в последующих частях учебника, потребуется Redis для запуска, и мы рекомендуем Docker как самый простой способ сделать это.
Создание проекта¶
Если у вас еще нет проекта Django, вам нужно будет его создать.
Выполните в терминале в командной строке cd : смену каталога на тот, в котором вы хотите хранить код проекта, затем запустите следующую команду:
Это создаст в вашем текущем каталоге каталог mysite со следующим содержимым:
Django 2.2 не будет иметь файла asgi.py . Не волнуйтесь, вы сможете создать его в ближайшее время.
Создание приложения чата¶
Мы поместим код для сервера чата в собственное приложение.
Убедитесь, что вы находитесь в том же каталоге, что и manage.py и введите эту команду:
Это создаст каталог chat , который будет выглядеть следующим образом:
В данном руководстве мы будем работать только с chat/views.py и chat/__ init __.py . Поэтому удалите все остальные файлы из каталога chat .
После удаления ненужных файлов каталог chat должен иметь вид:
Нам нужно сообщить нашему проекту, что приложение chat установлено. Отредактируйте файл mysite/settings.py и добавьте 'chat' в параметр INSTALLED_APPS. Это будет выглядеть следующим образом:
Добавление представление индексной страницы¶
Теперь мы создадим первое, индексное представление, которое позволит вам ввести имя комнаты чата, в которую вы хотите вступить.
Создайте каталог templates в каталоге chat . В каталоге templates , который вы только что создали, создайте еще один каталог с именем chat , и в нем создайте файл с именем index.html для хранения шаблона для представления индексной страницы.
Теперь ваш каталог чата должен выглядеть следующим образом:
Поместите следующий код в chat/templates/chat/index.html :
Создайте функцию представления для представления комнаты. Поместите следующий код в chat/views.py :
Чтобы вызвать представление, нам нужно сопоставить его с URL - и для этого нам нужен URLconf.
Чтобы создать URLconf в каталоге чата, создайте файл с именем urls.py . Теперь каталог вашего приложения должен выглядеть следующим образом:
В файл chat/urls.py включите следующий код:
Следующий шаг - указать корневой URLconf на модуль chat.urls. В mysite/urls.py добавьте импорт для django.conf.urls.include и вставьте include() в список urlpatterns, чтобы у вас были:
Давайте проверим, что представление индекса работает. Выполните следующую команду:
Вы увидите следующий вывод в командной строке:
Перейдите в терминал, где вы выполнили команду runserver и нажмите Control-C, чтобы остановить сервер.
Интеграция библиотеки Channels¶
Пока что мы только создали обычное приложение Django; мы вообще не использовали библиотеку Channels. Теперь пришло время интегрировать ее.
Начните с корректировки файла mysite/asgi.py , включив в него следующий код:
Django 2.2 не имеет встроенной поддержки ASGI, поэтому мы должны использовать альтернативу Channel. Создайте mysite/asgi.py следующим образом:
Теперь добавьте библиотеку Channels в список установленных приложений. Отредактируйте файл mysite/settings.py и добавьте 'channels' к параметру INSTALLED_APPS . Это будет выглядеть следующим образом:
Вам также нужно будет указать Channels на корневую конфигурацию маршрутизации. Отредактируйте файл mysite/settings.py еще раз и добавьте в его нижнюю часть следующее:
Теперь, когда Channels есть в установленных приложениях, он получит контроль над командой runserver , заменив стандартный сервер разработки Django на сервер разработки Channels.
Давайте убедимся, что сервер разработки Channels работает правильно. Выполните следующую команду:
Вы увидите следующий вывод в командной строке:
Проигнорируйте предупреждение о непримененных миграциях базы данных. Мы не будем использовать базу данных в этом уроке.
Перейдите в терминал, где вы выполнили команду runserver и нажмите Control-C, чтобы остановить сервер.
Прежде всего, позвольте мне показать вам окончательный вид приложения чата, которое мы завершим к концу этой статьи.
Мы реализуем приложение с Flask , Gunicorn для автономного приложения WSGI и Flask-SocketIO для связи в реальном времени.
1. Сценарий
Давайте рассмотрим пример сценария, который мы можем использовать в этой статье при создании приложения:
- Альберто хочет использовать наше приложение, поэтому он открывает его в браузере.
- Он выбирает ник и входит в чат.
- Он пишет что-то в текстовой области и нажимает Enter
- Введенный текст будет транслироваться пользователям, которые в данный момент вошли в приложение чата.
Как видите, это очень простое приложение, которое охватит все основы веб-приложения. Давайте продолжим с дизайном проекта.
2. Предпосылки
Прежде чем приступить к реализации проекта, нам нужно рассмотреть некоторые необходимые зависимости и библиотеки. Я выполню процесс установки в Ubuntu, чтобы сделать установку намного проще.
2.1. питон
Вы можете просто установить Python, просто выполнив следующую команду:
2.2. зернышко
pip — это система управления пакетами, используемая для установки и управления программными пакетами, написанными на Python. Мы будем использовать это для установки пакетов Python для нашего приложения. Вы можете установить pip, выполнив следующую команду:
2,3. Virtualenv
Этот инструмент позволяет вам создавать изолированную среду Python. Это означает, что вы можете переключить свой контекст в среду, имеющую свойства, связанные с Python, и вернуться в обычную среду, если у вас нет разработки на Python. Вы можете установить Virtualenv, выполнив следующую команду:
2,4. Gunicorn
Мы закончили с установочной частью. Давайте продолжим с настройкой проекта.
3. Настройка проекта
Создайте каталог проекта, как вы хотите;
Перейдите во вновь созданный каталог и создайте виртуальную среду для разработки на Python, например:
Вы можете изменить название среды в соответствии с вашими потребностями. Виртуальная среда создана, но еще не активирована. Если вы выполните следующую команду;
Ваша виртуальная среда Python будет активирована, и мы готовы установить требования в этой виртуальной среде. Чтобы быть уверенным в виртуальной среде, вы можете проверить, что ваша командная строка начинается с имени виртуальной среды в скобках, и вы увидите следующее;
3.1. Установка зависимостей
Нам нужно установить несколько зависимых библиотек для нашего проекта. Создайте файл под названием requirements.txt в корневом каталоге вашего проекта и поместите в него следующее содержимое:
Эти зависимости помогут нам создать веб-приложение в реальном времени. Теперь давайте установим зависимости следующей командой
3.2 Скелет проекта
На данный момент мы создали проект и установили необходимое программное обеспечение. Теперь давайте добавим файлы, специфичные для проекта.
Добавьте файл с именем server.py и поместите в него следующее содержимое:
Это простое приложение Flask, которое запускается через модуль Flask-SocketIO. Первый и второй маршрут предназначены для рендеринга главной страницы и страницы входа. Третий маршрут — для обработки события message на канале chat .
В этой статье мы реализуем простой, но крайне полезный проект на Python — бота для Telegram. Боты — это небольшие скрипты, которые могут взаимодействовать с API, чтобы получать сообщения от пользователя и отправлять информацию в разные чаты и каналы.
Python для новичков
- / newbot — создать нового бота;
- / mybots — редактировать ваших ботов;
- / setname — сменить имя бота;
- / setdescription — изменить описание бота;
- / setabouttext — изменить информацию о боте;
- / setuserpic — изменить фото аватарки бота;
- / setcommands — изменить список команд бота;
- / deletebot — удалить бота.
Отправим бате‑боту команду / newbot , чтобы создать нового бота. В ответ он попросит ввести имя будущего бота, его можно писать на русском. После ввода имени нужно будет отправить адрес бота, причем он должен заканчиваться на слово bot. Например, xakepbot или xakep_bot . Если адрес будет уже кем‑то занят, BotFather начнет извиняться и просить придумать что‑нибудь другое.
Для взаимодействия с Telegram API есть несколько готовых модулей. Самый простой из них — Telebot. Чтобы установить его, набери
В Linux, возможно, понадобится написать pip3 вместо pip , чтобы указать, что мы хотим работать с третьей версией Python.
Эхо-бот
Для начала реализуем так называемого эхо‑бота. Он будет получать от пользователя текстовое сообщение и возвращать его.
Читайте также: