From 04bfff3d3fd6e36e54f782e40252810b0a0f3a93 Mon Sep 17 00:00:00 2001 From: jze9 Date: Fri, 20 Mar 2026 12:11:55 +0500 Subject: [PATCH] flet web test --- web/designer.py | 221 +++++++++++++++++++++++++++++++++++++++++ web/info.py | 7 ++ web/main.py | 19 ++++ web/view.py | 9 ++ web/views/main_view.py | 41 ++++++++ 5 files changed, 297 insertions(+) create mode 100644 web/designer.py create mode 100644 web/info.py create mode 100644 web/main.py create mode 100644 web/view.py create mode 100644 web/views/main_view.py diff --git a/web/designer.py b/web/designer.py new file mode 100644 index 0000000..841b649 --- /dev/null +++ b/web/designer.py @@ -0,0 +1,221 @@ +import flet as ft + +class clolors: + background = "#C8B1E4" + laer1 = "#9B72CF" + laer2 = "#532B88" + laer3 = "#2F184B" + ferst = "#F4EFFA" + + + +class TextField_input(ft.TextField): + def __init__(self): + super().__init__( + + ) + +class CastomButton(ft.Button): + def __init__(self, text, on_click): + super().__init__( + text, + style=ft.ButtonStyle( + color=clolors.ferst, + bgcolor=clolors.laer1, + text_style=ft.TextStyle( + size=14 + ) + ), + on_click=on_click + ) + +class CastomSwitch(ft.Switch): + def __init__(self, label, on_change): + super().__init__( + label=label, + width=400, + label_text_style=ft.TextStyle(size=14, color=clolors.ferst), + active_color=clolors.ferst, + active_track_color=clolors.laer1, + inactive_thumb_color=clolors.laer2, + inactive_track_color=clolors.laer3, + on_change=on_change + ) + + +class AlterDiaalogApproval(ft.AlertDialog): + def __init__(self): + + self.switch_approval = CastomSwitch( + label="Я согласен с условиями пользовательского соглашения", + on_change=self.switch_changed + ) + + self.button_approval = CastomButton( + text="Принять", + on_click=self.accept + ) + + super().__init__( + title=ft.Text("Пользовательское соглашение"), + content=ft.Column( + width=400, + height=600, + scroll="auto", + controls=[ + ft.Markdown( + """ +# ПОЛЬЗОВАТЕЛЬСКОЕ СОГЛАШЕНИЕ + +## 1. ОБЩИЕ ПОЛОЖЕНИЯ + +Настоящее Пользовательское соглашение (далее — «Соглашение») регулирует отношения между администрацией сайта https://copp74.ru (далее — «Сайт», «Мы», «Администрация») и пользователем (далее — «Пользователь», «Вы»). + +Используя Сайт, Вы автоматически соглашаетесь со всеми условиями настоящего Соглашения. Если Вы не согласны с этими условиями, пожалуйста, не используйте Сайт. + +## 2. ОПИСАНИЕ САЙТА + +Сайт https://copp74.ru представляет собой онлайн-платформу для прохождения тестов и проверки знаний. Основная функция Сайта — предоставление Пользователям возможности проходить различные тесты и получать результаты. + +## 3. РЕГИСТРАЦИЯ И ЛИЧНЫЕ ДАННЫЕ + +### 3.1 Регистрация + +Для использования Сайта Пользователь должен зарегистрироваться и указать следующую информацию: +- Фамилию +- Имя +- Учебное заведение (образовательную организацию) + +### 3.2 Назначение личных данных + +Указанные фамилия, имя и учебное заведение используются исключительно для: +- Идентификации Пользователя в системе +- Отображения результатов тестирования +- Ведения статистики прохождения тестов +- Организации пользователей по учебным заведениям для аналитики +- Внутреннего анализа и улучшения качества тестирования + +### 3.3 Защита личных данных + +**Мы гарантируем, что Ваши персональные данные (фамилия, имя и информация об учебном заведении):** +- Не будут переданы третьим лицам или организациям без Вашего согласия +- Не будут использованы в коммерческих целях +- Не будут распространяться без Вашего согласия +- Хранятся в защищенной базе данных + +Данные будут удалены в соответствии с законодательством Российской Федерации по защите персональных данных при закрытии аккаунта или по запросу Пользователя. + +## 4. ПРАВА И ОБЯЗАННОСТИ ПОЛЬЗОВАТЕЛЯ + +### 4.1 Права Пользователя + +Пользователь имеет право: +- Проходить тесты, размещенные на Сайте +- Получать результаты своего тестирования +- Запросить удаление своего аккаунта и данных +- Обратиться в поддержку по вопросам использования Сайта +- Получить информацию о том, как его данные обрабатываются + +### 4.2 Обязанности Пользователя + +Пользователь обязуется: +- Предоставлять достоверную информацию при регистрации +- Указывать корректное название учебного заведения +- Не использовать Сайт в противоправных целях +- Не пытаться получить несанкционированный доступ к системам Сайта +- Не воспроизводить, не копировать и не распространять содержимое Сайта без разрешения +- Соблюдать все применимые законы Российской Федерации + +## 5. ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ + +### 5.1 Предоставление Сайта «Как есть» + +Сайт предоставляется в режиме «как есть» без каких-либо явных или подразумеваемых гарантий. Администрация не гарантирует: +- Непрерывную работу Сайта +- Отсутствие ошибок в тестах или результатах +- Соответствие Сайта конкретным целям Пользователя + +### 5.2 Ограничение ответственности + +В максимальной степени, допускаемой законодательством Российской Федерации, Администрация не несет ответственность за: +- Убытки, возникшие в результате использования или невозможности использования Сайта +- Технические сбои, потерю данных +- Ущерб, причиненный прямо или косвенно в связи с использованием Сайта + +## 6. ИНТЕЛЛЕКТУАЛЬНАЯ СОБСТВЕННОСТЬ + +Все содержимое Сайта, включая тесты, вопросы, задания, дизайн, логотипы и тексты, защищено авторским правом и законами об интеллектуальной собственности Российской Федерации. Пользователь не имеет права использовать это содержимое в коммерческих целях без письменного разрешения Администрации. + +## 7. ИЗМЕНЕНИЕ СОГЛАШЕНИЯ + +Администрация оставляет за собой право изменять условия настоящего Соглашения в любое время. Изменения вступают в силе с момента их публикации на Сайте. Продолжение использования Сайта после публикации изменений означает согласие Пользователя с новыми условиями. + +## 8. ПРЕКРАЩЕНИЕ ДОСТУПА + +Администрация может заблокировать доступ Пользователя к Сайту без предварительного уведомления, если: +- Пользователь нарушает условия настоящего Соглашения +- Пользователь использует Сайт в противоправных целях +- Пользователь предоставил поддельную информацию при регистрации + +## 9. КОНФИДЕНЦИАЛЬНОСТЬ + +Пожалуйста, ознакомьтесь с нашей Политикой конфиденциальности, которая описывает, как мы обращаемся с Вашими личными данными и какие меры безопасности мы применяем. + +## 10. ПРИМЕНИМОЕ ПРАВО + +Настоящее Соглашение регулируется законодательством Российской Федерации. Все споры, возникающие в связи с Соглашением, подлежат разрешению в судах Российской Федерации. + +## 11. КОНТАКТНАЯ ИНФОРМАЦИЯ + +Если у Вас есть вопросы по данному Соглашению или функционированию Сайта https://copp74.ru, свяжитесь с нами через форму обратной связи на Сайте. + +## 12. ЗАКЛЮЧИТЕЛЬНЫЕ ПОЛОЖЕНИЯ + +Если какая-либо часть настоящего Соглашения будет признана недействительной, остальные положения остаются в полной силе. + +Пользователь подтверждает, что прочитал, понял и согласен со всеми условиями настоящего Соглашения перед использованием Сайта. + +**Дата последнего обновления:** 19.03.2026 + +--- + +*Соглашение соответствует законодательству Российской Федерации, включая Федеральный закон «О защите персональных данных» и Федеральный закон «О защите прав потребителей».* + """, + width=400, + ) + ] + ), + actions=[ + ft.Column( + width=400, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + controls=[ + ft.Row( + expand=True, + alignment=ft.MainAxisAlignment.START, + controls=[ + self.switch_approval, + ] + ), + ft.Row( + expand=True, + alignment=ft.MainAxisAlignment.CENTER, + controls=[ + self.button_approval, + ] + ) + ] + ) + ], + actions_alignment=ft.MainAxisAlignment.CENTER, + ) + + def switch_changed(self, e): + #self.switch_approval.value = not e.control.value + self.button_approval.disabled = not e.control.value + self.update() + + def accept(self, e): + self.dialog_result = True + self.open = False + self.page.update() \ No newline at end of file diff --git a/web/info.py b/web/info.py new file mode 100644 index 0000000..392e687 --- /dev/null +++ b/web/info.py @@ -0,0 +1,7 @@ +import flet as ft + +class user(): + def __init__(self, page: ft.Page): + pass + +#page.client_storage.set("token", "your_jwt_token_here") \ No newline at end of file diff --git a/web/main.py b/web/main.py new file mode 100644 index 0000000..09bf7e2 --- /dev/null +++ b/web/main.py @@ -0,0 +1,19 @@ +import flet as ft +from view import ViewsHendler + +async def main(page: ft.Page): + page.title = "COPP" + + def route_change(e: ft.RouteChangeEvent): + print("Route changed to:", page.route) + page.views.clear() + + view = ViewsHendler(page).get(page.route) + if view: # проверяем, что view получен + page.views.append(view) + page.update() + + page.on_route_change = route_change + await page.push_route("/main") + +ft.run(main, port=80345, assets_dir="assets") \ No newline at end of file diff --git a/web/view.py b/web/view.py new file mode 100644 index 0000000..ec77868 --- /dev/null +++ b/web/view.py @@ -0,0 +1,9 @@ +import flet as ft +from views import main_view + +def ViewsHendler(page: ft.Page): + return { + "/main": main_view.MainView(), + "/about": ft.View(route="/about", controls=[ft.Text("О нас",color="#008000", size=20)]), + "/contact": ft.View(route="/contact", controls=[ft.Text("Контакты",color="#FF0000", size=20)]) + } \ No newline at end of file diff --git a/web/views/main_view.py b/web/views/main_view.py new file mode 100644 index 0000000..4482a8f --- /dev/null +++ b/web/views/main_view.py @@ -0,0 +1,41 @@ +import flet as ft +import asyncio +import designer as ds + +class MainView(ft.View): + def __init__(self): + + self.button_temp = ds.CastomButton( + text="Приступим", + on_click=self.open_dialog, + ) + + super().__init__( + route="/main", + bgcolor=ds.clolors.background, + horizontal_alignment=ft.CrossAxisAlignment.CENTER, + vertical_alignment=ft.MainAxisAlignment.CENTER, + ) + self.controls = [ + ft.Text("COPP",color=ds.clolors.ferst, size=30), + ft.Text("Это проект цопп по проведению иследовательских тестирований",color=ds.clolors.ferst, size=16), + ft.Container(width=0, height=20), + self.button_temp + ] + + def did_mount(self): + async def _open_later(): + await asyncio.sleep(0.1) + self.open_dialog(None) + self.page.run_task(_open_later) + + def open_dialog(self, e): + self.dialog = ds.AlterDiaalogApproval() + self.dialog.open = True + self.page.overlay.append(self.dialog) + self.page.update() + + def close_dialog(self, e): + self.dialog.open = False + self.page.update() + \ No newline at end of file