Как сделать чат на python

Добавил пользователь Евгений Кузнецов
Обновлено: 10.09.2024

Модели Chat и Message

Это был бы отличный вариант для дальнейшего развития ресурса. Но в данном случае требуется создать две модели Chat и Message .

Каждый чат имеет many-to-many связь, которая отвечает за список участников в рамках чата. Благодаря этому можно ограничить просмотр чатов, а также возможность писать в чаты, если пользователь не был приглашён в данный чат.

urls.py

Какие вьюшки нам понадобятся и какие маршруты можно сделать? Мне на реализацию данного функционала в самом простом виде понадобилось написать три вьюшки и соответственно три маршрута в urls.py.

Не будем углубляться в каком именно приложении будем использовать данные маршруты - это не принципиально.

В данном случае можно использовать форму для модели. Укажем модель, а также какие поля должны быть отображены с удалением лейбла у поля ввода.

По умолчанию у вас будет обычная textarea. Я использую свой самописный WYSIWYG редактор.

Представления и шаблоны

Отображение списка диалогов

Для получения списка всех диалогов, в которых задействован пользователь, необходимо провести фильтрацию всех чатов по участникам, то есть по Many-toMany полю members.

Наибольший интерес представляет сам список диалогов и его вёрстка, поэтому из шаблона здесь будет представлена только та часть, которая отвечает за вёрстку.

Таким образом список диалогов будет выглядеть следующим образом:


Пример получившегося диалога


Начало беседы с пользователем

Обязательно делаем проверку на количество пользователей, поскольку в личной беседе может быть только два пользователя, ну и проверяем, чтобы этими пользователями был наш авторизованный пользователей, а также пользователь с которым мы пытаемся начать беседу.

Для Django рекомендую VDS-сервера хостера Timeweb .

Рекомендуем хостинг 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. Сценарий

Давайте рассмотрим пример сценария, который мы можем использовать в этой статье при создании приложения:

  1. Альберто хочет использовать наше приложение, поэтому он открывает его в браузере.
  2. Он выбирает ник и входит в чат.
  3. Он пишет что-то в текстовой области и нажимает Enter
  4. Введенный текст будет транслироваться пользователям, которые в данный момент вошли в приложение чата.

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

2. Предпосылки

Прежде чем приступить к реализации проекта, нам нужно рассмотреть некоторые необходимые зависимости и библиотеки. Я выполню процесс установки в Ubuntu, чтобы сделать установку намного проще.

2.1. питон

Вы можете просто установить Python, просто выполнив следующую команду:

2.2. зернышко

pip — это система управления пакетами, используемая для установки и управления программными пакетами, написанными на Python. Мы будем использовать это для установки пакетов Python для нашего приложения. Вы можете установить pip, выполнив следующую команду:

2,3. Virtualenv

Этот инструмент позволяет вам создавать изолированную среду Python. Это означает, что вы можете переключить свой контекст в среду, имеющую свойства, связанные с Python, и вернуться в обычную среду, если у вас нет разработки на Python. Вы можете установить Virtualenv, выполнив следующую команду:

2,4. Gunicorn

Мы закончили с установочной частью. Давайте продолжим с настройкой проекта.

3. Настройка проекта

Создайте каталог проекта, как вы хотите;

Перейдите во вновь созданный каталог и создайте виртуальную среду для разработки на Python, например:

Вы можете изменить название среды в соответствии с вашими потребностями. Виртуальная среда создана, но еще не активирована. Если вы выполните следующую команду;

Ваша виртуальная среда Python будет активирована, и мы готовы установить требования в этой виртуальной среде. Чтобы быть уверенным в виртуальной среде, вы можете проверить, что ваша командная строка начинается с имени виртуальной среды в скобках, и вы увидите следующее;

Virtualenv активированная консоль

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.

Эхо-бот

Для начала реали­зуем так называ­емо­го эхо-бота. Он будет получать от поль­зовате­ля тек­сто­вое сооб­щение и воз­вра­щать его.

Читайте также: