Compare commits
5 Commits
aaf608d2d2
...
a7eee835b8
Author | SHA1 | Date |
---|---|---|
|
a7eee835b8 | 2 years ago |
|
bef3d2fc94 | 2 years ago |
|
aa95400309 | 2 years ago |
|
f6627d3d26 | 2 years ago |
|
c95a7e4c58 | 2 years ago |
@ -0,0 +1,92 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html lang="en"> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8" /> |
||||||
|
<title>Знакомство с aiohttp</title> |
||||||
|
<style> |
||||||
|
html { |
||||||
|
font-family: Verdana, "sans-serif"; |
||||||
|
} |
||||||
|
|
||||||
|
body { |
||||||
|
min-height: 100vh; |
||||||
|
background: linear-gradient( |
||||||
|
90deg, |
||||||
|
rgba(2, 0, 36, 1) 0%, |
||||||
|
rgba(9, 9, 121, 1) 35%, |
||||||
|
rgba(0, 212, 255, 1) 100% |
||||||
|
); |
||||||
|
} |
||||||
|
h1, |
||||||
|
p { |
||||||
|
color: white; |
||||||
|
} |
||||||
|
.time_block, |
||||||
|
.output_block { |
||||||
|
border: 2px solid white; |
||||||
|
border-radius: 5px; |
||||||
|
margin: 10px; |
||||||
|
padding: 10px; |
||||||
|
height: 50px; |
||||||
|
width: 300px; |
||||||
|
} |
||||||
|
.message_form { |
||||||
|
margin: 10px; |
||||||
|
} |
||||||
|
</style> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<header> |
||||||
|
<h1>Дата и время</h1> |
||||||
|
</header> |
||||||
|
<main> |
||||||
|
<div class="time_block"> |
||||||
|
<p id="time"></p> |
||||||
|
</div> |
||||||
|
<div class="message_form"> |
||||||
|
<form id="myForm2"> |
||||||
|
<input |
||||||
|
type="text" |
||||||
|
name="message_text_user" |
||||||
|
placeholder="Введите текст" |
||||||
|
/> |
||||||
|
<input type="button" name="submit_message" value="Отправить" /> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
<div class="output_block"> |
||||||
|
<p id="output_message" class="output"></p> |
||||||
|
</div> |
||||||
|
</main> |
||||||
|
<script> |
||||||
|
const messageTime = document.getElementById("time"); |
||||||
|
const messageInput = document.querySelector("[name=message_text_user]"); |
||||||
|
const messageOtput = document.getElementById("output_message"); |
||||||
|
const sendMessage = document.querySelector("[name=submit_message]"); |
||||||
|
let websocketClient = new WebSocket("ws://127.0.0.1:8080/ws"); |
||||||
|
websocketClient.onopen = () => { |
||||||
|
console.log("Client connected!"); |
||||||
|
sendMessage.onclick = () => { |
||||||
|
console.log("1"); |
||||||
|
websocketClient.send(messageInput.value); |
||||||
|
messageInput.value = ""; |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
websocketClient.onmessage = (message) => { |
||||||
|
if (message.data.includes("Время: ")) { |
||||||
|
if (typeof messageTime.textContent !== "undefined") { |
||||||
|
messageTime.textContent = message.data; |
||||||
|
} else { |
||||||
|
messageTime.innerText = message.data; |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (typeof messageOtput.textContent !== "undefined") { |
||||||
|
messageOtput.textContent = message.data; |
||||||
|
} else { |
||||||
|
messageOtput.innerText = message.data; |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
@ -1 +1,2 @@ |
|||||||
from . import frontend |
from . import frontend |
||||||
|
|
||||||
|
@ -1,16 +1,51 @@ |
|||||||
import aiohttp |
import aiohttp |
||||||
|
from aiohttp import WSMsgType |
||||||
|
from aiohttp.web_response import Response |
||||||
|
from aiohttp.web_ws import WebSocketResponse |
||||||
from aiohttp_jinja2 import template |
from aiohttp_jinja2 import template |
||||||
|
import time |
||||||
|
import asyncio |
||||||
|
|
||||||
|
async def time_response(ws: WebSocketResponse, delay: int = 60): |
||||||
|
while True: |
||||||
|
new_time: time.gmtime = time.gmtime(time.time()) |
||||||
|
time_response = f'Время: {new_time.tm_hour + 3}:{new_time.tm_min} Задержка: {delay}' |
||||||
|
try: |
||||||
|
await ws.send_str(time_response) |
||||||
|
await asyncio.sleep(delay) |
||||||
|
except ConnectionResetError: |
||||||
|
await asyncio.sleep(delay) |
||||||
@template('index.html') |
@template('index.html') |
||||||
async def index(request): |
async def index(request): |
||||||
return {} |
return {} |
||||||
|
|
||||||
|
@template('index_2.html') |
||||||
|
async def index_2(request): |
||||||
|
return {} |
||||||
|
|
||||||
|
|
||||||
|
async def websocket_handler(request): |
||||||
|
ws: WebSocketResponse = WebSocketResponse() |
||||||
|
await ws.prepare(request) |
||||||
|
asyncio.create_task(time_response(ws)) |
||||||
|
async for msg in ws: |
||||||
|
|
||||||
|
if msg.type == aiohttp.WSMsgType.TEXT: |
||||||
|
|
||||||
|
if msg.data == 'close': |
||||||
|
await ws.close() |
||||||
|
else: |
||||||
|
await ws.send_str(f'Вы послали: {msg.data}') |
||||||
|
elif msg.type == WSMsgType.ERROR: |
||||||
|
print('ws connection closed with exception %s' % |
||||||
|
ws.exception()) |
||||||
|
|
||||||
|
print('websocket connection closed') |
||||||
|
|
||||||
|
return ws |
||||||
async def button_clicked(request): |
async def button_clicked(request): |
||||||
data = await request.post() |
data = await request.post() |
||||||
text = data.get('text') |
text = data.get('text') |
||||||
response_text = f'Вы ввели: {text}' |
response_text = f'Вы ввели: {text}' |
||||||
print(response_text) |
print(response_text) |
||||||
return aiohttp.web.Response(text=response_text) |
return Response(text=response_text) |
Loading…
Reference in new issue