Рубрики
Без рубрики

Создание простой веб -чашки

Узнайте, как создать простой веб -чат с Python и Flask. С тегами Webchat, начинающих, Python, WebSockets.

Привет. В этом посте вы узнаете, как создать простой веб -чат с помощью Python и Web Sockets. Поскольку это так, вам нужно будет иметь Python установлен на вашем компьютере.

Этот исходный код проекта доступен на этом GitHub Repository И вы можете увидеть его онлайн по адресу Папо рето Анкет

Если у вас нет колба Пакет, вы можете установить его со следующей командой: PIP установить колбу Анкет Вам также понадобится flask_socketio и событие , так что вы можете бежать пип установить flask_socketio и PIP установить событие Чтобы установить их.

Теперь, когда у вас все установлено, так будут выглядеть файлы и каталоги нашего проекта:

templates
 - index.html
static
   css
    - style.css
- main.py

Ядром нашего проекта является main.py Файл, это то, что будет контролировать наше приложение. Это будет выглядеть так:

#! -*- enconding: utf-8 -*-
from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__, template_folder='templates', static_folder='static', static_url_path='/static/')
socketio = SocketIO(app)

@app.route('/')
def index():
    return render_template('index.html')

@socketio.on('client_message')
def receive_message (client_msg):
    emit('server_message', client_msg, broadcast=True)

if __name__ == '__main__':
    socketio.run(app)

Первые две строки кода импортируют пакеты и модули, которые мы собираемся использовать в этом проекте.

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

Колба наша веб -структура, и flask_socketio это пакет, который позволяет колба Чтобы использовать полнодуплексные протоколы связи с низкой задержкой, такие как веб-токеты.

Затем мы создаем создание наше приложение Flask и определяем, где будут шаблоны и статические файлы. Мы также создаем создание нашего объекта сокета и передаем приложение Flask в качестве аргумента.

app = Flask(__name__, template_folder='templates', static_folder='static', static_url_path='/static/')
socketio = SocketIO(app)

Теперь мы определяем наш маршрут по умолчанию, который вернет index.html страница:

@app.route('/')
def index():
    return render_template('index.html')

Когда пользователь отправит сообщение, оно испускает событие client_message на сервер, передавая прозвище и сообщение в виде параметров. Затем сервер будет транслировать это сообщение каждому подключенному пользователю:

@socketio.on('client_message')
def receive_message (client_msg):
    emit('server_message', client_msg, broadcast=True)

Наконец, мы начнем запускать наше приложение со следующими строками:

if __name__ == '__main__':
    socketio.run(app)

Вот и все, наш main.py Файл теперь завершен, и это доставит нас к index.html файл. В этом случае он будет иметь 3 основных частях: Сообщение BOX , входной короб и Прозвище-бокс Анкет Содержание этого файла будет:





Papo Reto







Papo Reto

Мы используем Сокета API клиента, чтобы подключиться и позаботиться о обработке веб -копье. Итак, в этом случае мы используем CDN для этого:


Теперь, с JavaScript, нам нужно определить наш объект сокета, который будет подключаться к серверу:

const socket = io();

Поскольку WebSocket находится на том же маршруте, нам не нужно проходить что -либо в качестве параметров.

Когда пользователь нажимает на кнопку «Отправить», он позвонит Отправить сообщение функция Но если пользователь набирает что -то на вводе с входной короб ID, это позвонит Ispressingenter Функция, которая проверит, нажат ли пользователь Enter. Если это так, это также позвонит sendmessage () :

function isPressingEnter(e){
    let k;
    if(window.event){
        k = e.keyCode;
        if(k===13){
            sendMessage();
        }
    }else if(e.which){
        k = e.which;
        if(k===13){
            sendMessage();
        }
    }
}

Sendmessage Функция затем испускает A client_message Событие на сервер, передавая прозвище и сообщение в качестве данных:

function sendMessage(){
    socket.emit('client_message', {'nickname': htmlEntities(document.getElementById('nickname-input').value), 'message':  htmlEntities(document.getElementById('message-input').value)});
    document.getElementById('message-input').value = '';
}

Мы также используем htmlentity Функция для удаления HTML -тегов с входов:

function htmlEntities(str) {
    return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
}

Когда сервер получает сообщение, он будет транслировать сообщение всем, излучая Сообщение сервера мероприятие. Поэтому нам нужно добавить это сообщение в Сообщение BOX Когда server_message Событие получено:

socket.on('server_message', (data) => {
    let e = document.createElement('p');
    let sp = document.createElement('span');
    sp.innerHTML = data.nickname;
    e.appendChild(sp);
    e.innerHTML = e.innerHTML+'>> '+data.message;
    if(document.getElementById('message-box').children.length>20){
        document.getElementById('message-box').removeChild(document.getElementById('message-box').children[0]);
    }
    document.getElementById('message-box').appendChild(e);

    document.getElementById('message-box').scroll(0, document.getElementById('message-box').scrollHeight);
});

Если вы сейчас, запустите сервер с Python main.py , вы увидите, что наш Webchat уже работает.

Но так как это выглядит ужасно, мы добавим в это несколько CSS. Шаблоны колбы используют Джинджа Как его шаблонный двигатель, поэтому он немного отличается от добавления нашего пути файла CSS к индекс страница. Мы можем сделать это, добавив следующие строки кода внутри глава ярлык:


Вы можете сделать так, как хотите, но в этом случае это содержимое нашего файла CSS:

*{
    margin: 0;
    padding: 0;
}
body{
    background: #202020;
    color: #eee;
    font-family: 'monospace';
    line-height: 1.4em; 
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    align-items: center;
    padding: 15px;
}
#title{
    font-size: calc(20px + 2vw + 1vh);
    padding: 40px;
}
#chat-box{
    border: 2px solid #ccc;
    border-radius: 10px;
    box-shadow: 3px 4px 4px #111;
}
@media only screen and (max-width: 600px){
    #chat-box{
        width: 95vw;
    }
}
@media only screen and (min-width: 600px){
    #chat-box{
        width: 80vw;
    }
}
#message-box{
    width: 100%;
    height: 60vh;
    background: #444;
    overflow-y: scroll;
    padding: 5px;
    font-size: calc(10px + 1vh + 2vw);
}
#message-box p{
    width: 100%;
    line-height: 1.5em;
    overflow-wrap: break-word;
    padding: 5px 2px;
    margin: 2px 0;
    background: #4f4f4f;
}
#message-box span{
    color: yellow;
    font-weight: 900;
}

#input-box{
    width: 100%;
    height: 100%;
    display: grid;
    grid-template-columns: 90% 10%;
}
#message-input{
    height: 90%;
    font-size: calc(10px + 1vh + 2vw);
    border-radius: 0 0 0 6px;
}
#send-button{
    background: purple;
    color: #f0f0a0;
    height: 100%;
    font-size: calc(10px + 1vh);
    font-weight: 900;
}
#nickname-box{
    padding: 15px;
}
#nickname-input {
    border-radius: 5px;
    background: purple;
    color: white;
    padding: 2px;
    font-size: calc(10px + 1vh + 1vw);
}
#nickname-label{
    font-size: calc(10px + 1vh + 1vw);

}

И теперь это результат:

Спасибо за Ваше внимание! Это один из способов построить действительно простой webchat с помощью Python. Кроме того, это довольно легко сделать, но если вы, ребята, хотите, я также могу показать, как развернуть его в Heroku. Таким образом, вы можете позволить ему работать в Интернете.

Оригинал: “https://dev.to/raymag/building-a-simple-webchat-2504”