From c95a7e4c5889e6f308a73326722ee22fbacae3ab Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 2 Jun 2023 18:51:21 +0300 Subject: [PATCH 01/12] add websocket_handler and time_response --- demo/views/frontend.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/demo/views/frontend.py b/demo/views/frontend.py index b5f5ecf..5a54784 100644 --- a/demo/views/frontend.py +++ b/demo/views/frontend.py @@ -1,16 +1,51 @@ import aiohttp - +from aiohttp import WSMsgType +from aiohttp.web_response import Response +from aiohttp.web_ws import WebSocketResponse 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') async def index(request): 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): data = await request.post() text = data.get('text') response_text = f'Вы ввели: {text}' print(response_text) - return aiohttp.web.Response(text=response_text) \ No newline at end of file + return Response(text=response_text) \ No newline at end of file From f6627d3d2669e4ce3c56c9bda810e4e8e95a7fec Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 2 Jun 2023 18:54:05 +0300 Subject: [PATCH 02/12] add new page. Page in websocketClient connection --- demo/templates/index_2.html | 92 +++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 demo/templates/index_2.html diff --git a/demo/templates/index_2.html b/demo/templates/index_2.html new file mode 100644 index 0000000..c3b5980 --- /dev/null +++ b/demo/templates/index_2.html @@ -0,0 +1,92 @@ + + + + + Знакомство с aiohttp + + + +
+

Дата и время

+
+
+
+

+
+
+
+ + +
+
+
+

+
+
+ + + From aa95400309f4a69fdffd38e23704f2945626ca0d Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 2 Jun 2023 18:54:30 +0300 Subject: [PATCH 03/12] add rout ws --- demo/routes.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/demo/routes.py b/demo/routes.py index 3940b96..991abaf 100644 --- a/demo/routes.py +++ b/demo/routes.py @@ -3,5 +3,10 @@ import aiohttp def setup_routes(app): - app.router.add_routes([aiohttp.web.get('/', frontend.index), aiohttp.web.post('/submit', frontend.button_clicked)]) + app.router.add_routes([aiohttp.web.get('/index.html', frontend.index), + aiohttp.web.post('/submit', frontend.button_clicked), + aiohttp.web.get('/index_2.html', frontend.index_2), + aiohttp.web.get('/ws', frontend.websocket_handler) + ] + ) \ No newline at end of file From bef3d2fc94ff449d24c868c19aeb761a8d6b4310 Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 2 Jun 2023 18:55:22 +0300 Subject: [PATCH 04/12] add a link to new page --- demo/templates/index.html | 76 +++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/demo/templates/index.html b/demo/templates/index.html index b0613b1..2ea710e 100644 --- a/demo/templates/index.html +++ b/demo/templates/index.html @@ -10,31 +10,35 @@ 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%) + background: linear-gradient( + 90deg, + rgba(2, 0, 36, 1) 0%, + rgba(9, 9, 121, 1) 35%, + rgba(0, 212, 255, 1) 100% + ); } - h1{ + h1 { color: white; - } - p{ - color:white; + p { + color: white; } - .container{ + .container { margin-left: 20vw; } - #submit{ + #submit { margin-top: 20px; border-radius: 10px; height: 50px; - width:50vw; - color:black; + width: 50vw; + color: black; } - #inputText{ + #inputText { border-radius: 10px; height: 30px; width: 49.5vw; } - .container_result{ + .container_result { margin-top: 20px; min-height: 50px; text-align: center; @@ -43,8 +47,6 @@ border-radius: 5px; background-color: grey; } - - @@ -53,35 +55,41 @@
- -
- + +
+ +

+
-
+ - + + const responseText = await response.text(); + document.getElementById("response").innerText = responseText; + }); + From a7eee835b8cd66690069143e4ebbb6dd7eb688b6 Mon Sep 17 00:00:00 2001 From: kirill Date: Fri, 2 Jun 2023 18:55:57 +0300 Subject: [PATCH 05/12] without changes --- demo/views/__init__.py | 1 + entry.py | 1 + 2 files changed, 2 insertions(+) diff --git a/demo/views/__init__.py b/demo/views/__init__.py index 20f280e..910cb7a 100644 --- a/demo/views/__init__.py +++ b/demo/views/__init__.py @@ -1 +1,2 @@ from . import frontend + diff --git a/entry.py b/entry.py index cb4d3e3..0160f5f 100644 --- a/entry.py +++ b/entry.py @@ -6,3 +6,4 @@ app = create_app() if __name__ == '__main__': aiohttp.web.run_app(app) +# Добавить 2 страничку, подключить ws, отправлял текущие время раз в минуту. Ну и также отвечать на собщения. From a946dd42c8e3a63bda6ce710684ac8cd5488c124 Mon Sep 17 00:00:00 2001 From: kirill Date: Sat, 3 Jun 2023 16:13:22 +0300 Subject: [PATCH 06/12] add websocket_handler and time_response Signed-off-by: kirill --- demo/views/frontend.py | 47 +++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/demo/views/frontend.py b/demo/views/frontend.py index 5a54784..82e2ea7 100644 --- a/demo/views/frontend.py +++ b/demo/views/frontend.py @@ -15,6 +15,8 @@ async def time_response(ws: WebSocketResponse, delay: int = 60): await asyncio.sleep(delay) except ConnectionResetError: await asyncio.sleep(delay) + + @template('index.html') async def index(request): return {} @@ -24,28 +26,31 @@ 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()) + 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 - print('websocket connection closed') - return ws async def button_clicked(request): - data = await request.post() - text = data.get('text') - response_text = f'Вы ввели: {text}' - print(response_text) - return Response(text=response_text) \ No newline at end of file + data = await request.post() + text = data.get('text') + response_text = f'Вы ввели: {text}' + print(response_text) + return Response(text=response_text) \ No newline at end of file From 7fbadce5587928a245e446d57b9444080cfb7e28 Mon Sep 17 00:00:00 2001 From: kirill Date: Sat, 3 Jun 2023 16:21:50 +0300 Subject: [PATCH 07/12] reformat Signed-off-by: kirill --- demo/templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/templates/index.html b/demo/templates/index.html index 2ea710e..3bdd8bd 100644 --- a/demo/templates/index.html +++ b/demo/templates/index.html @@ -74,7 +74,7 @@ document .getElementById("myForm") .addEventListener("submit", async function (event) { - event.preventDefault(); // Предотвращаем отправку формы по умолчанию + event.preventDefault(); const inputText = document.getElementById("inputText").value; From 5edc3beb782035e9f1bc9c176038eefe9459ebf2 Mon Sep 17 00:00:00 2001 From: kirill Date: Sat, 3 Jun 2023 16:40:56 +0300 Subject: [PATCH 08/12] add package secondary_functions Signed-off-by: kirill --- demo/func/__init__.py | 1 + demo/func/secondary_functions.py | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 demo/func/__init__.py create mode 100644 demo/func/secondary_functions.py diff --git a/demo/func/__init__.py b/demo/func/__init__.py new file mode 100644 index 0000000..10c0679 --- /dev/null +++ b/demo/func/__init__.py @@ -0,0 +1 @@ +from . import secondary_functions \ No newline at end of file diff --git a/demo/func/secondary_functions.py b/demo/func/secondary_functions.py new file mode 100644 index 0000000..5fc9107 --- /dev/null +++ b/demo/func/secondary_functions.py @@ -0,0 +1,20 @@ +import time +import asyncio +from aiohttp.web_ws import WebSocketResponse + + +async def time_response(ws: WebSocketResponse, delay: int = 60): + while True: + new_time: time.gmtime = time.gmtime(time.time()) + hour = new_time.tm_hour + 3 + if hour >= 24: + hour = hour - 24 + minutes = new_time.tm_min + if minutes < 10: + minutes = f'0{minutes}' + result_response = f'Время: {hour}:{minutes}' + try: + await ws.send_str(result_response) + await asyncio.sleep(delay) + except ConnectionResetError: + await asyncio.sleep(delay) \ No newline at end of file From 2a0189e89217b7b587150bf85238cff2ba4d54e6 Mon Sep 17 00:00:00 2001 From: kirill Date: Sat, 3 Jun 2023 17:02:48 +0300 Subject: [PATCH 09/12] use secondary_functions in ws_handler Signed-off-by: kirill --- demo/views/frontend.py | 61 +++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/demo/views/frontend.py b/demo/views/frontend.py index 82e2ea7..5b4d6e8 100644 --- a/demo/views/frontend.py +++ b/demo/views/frontend.py @@ -1,20 +1,10 @@ +import asyncio import aiohttp from aiohttp import WSMsgType from aiohttp.web_response import Response from aiohttp.web_ws import WebSocketResponse 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) +from ..func import secondary_functions @template('index.html') @@ -26,31 +16,30 @@ 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 + ws: WebSocketResponse = WebSocketResponse() + await ws.prepare(request) + asyncio.create_task(secondary_functions.time_response(ws, delay=60)) + 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): - data = await request.post() - text = data.get('text') - response_text = f'Вы ввели: {text}' - print(response_text) - return Response(text=response_text) \ No newline at end of file + data = await request.post() + text = data.get('text') + response_text = f'Вы ввели: {text}' + print(response_text) + return Response(text=response_text) \ No newline at end of file From 3dbb0257ae88fa10033e7216e44797664dac98e8 Mon Sep 17 00:00:00 2001 From: kirill Date: Sat, 3 Jun 2023 17:03:31 +0300 Subject: [PATCH 10/12] reformat Signed-off-by: kirill --- demo/routes.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/demo/routes.py b/demo/routes.py index 991abaf..4b3996e 100644 --- a/demo/routes.py +++ b/demo/routes.py @@ -6,7 +6,6 @@ def setup_routes(app): app.router.add_routes([aiohttp.web.get('/index.html', frontend.index), aiohttp.web.post('/submit', frontend.button_clicked), aiohttp.web.get('/index_2.html', frontend.index_2), - aiohttp.web.get('/ws', frontend.websocket_handler) - ] + aiohttp.web.get('/ws', frontend.websocket_handler),] ) \ No newline at end of file From 8e981e28f9e0de3b5897877e3d3d6bea350be49c Mon Sep 17 00:00:00 2001 From: kirill Date: Wed, 7 Jun 2023 17:08:52 +0300 Subject: [PATCH 11/12] reformat Signed-off-by: kirill --- demo/views/frontend.py | 9 +-------- entry.py | 2 +- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/demo/views/frontend.py b/demo/views/frontend.py index 5b4d6e8..7919dc0 100644 --- a/demo/views/frontend.py +++ b/demo/views/frontend.py @@ -21,19 +21,12 @@ async def websocket_handler(request): await ws.prepare(request) asyncio.create_task(secondary_functions.time_response(ws, delay=60)) 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}') + 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 diff --git a/entry.py b/entry.py index 0160f5f..73db430 100644 --- a/entry.py +++ b/entry.py @@ -6,4 +6,4 @@ app = create_app() if __name__ == '__main__': aiohttp.web.run_app(app) -# Добавить 2 страничку, подключить ws, отправлял текущие время раз в минуту. Ну и также отвечать на собщения. + From 55374189682eb67a49e54e134755448628570a29 Mon Sep 17 00:00:00 2001 From: kirill Date: Wed, 7 Jun 2023 17:11:08 +0300 Subject: [PATCH 12/12] Fixed a bug in the function time_response Signed-off-by: kirill --- demo/func/secondary_functions.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/demo/func/secondary_functions.py b/demo/func/secondary_functions.py index 5fc9107..9525d93 100644 --- a/demo/func/secondary_functions.py +++ b/demo/func/secondary_functions.py @@ -17,4 +17,5 @@ async def time_response(ws: WebSocketResponse, delay: int = 60): await ws.send_str(result_response) await asyncio.sleep(delay) except ConnectionResetError: - await asyncio.sleep(delay) \ No newline at end of file + break + \ No newline at end of file