flet web test

This commit is contained in:
2026-03-20 12:11:55 +05:00
parent bf58b2d592
commit 04bfff3d3f
5 changed files with 297 additions and 0 deletions

221
web/designer.py Normal file
View File

@@ -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()

7
web/info.py Normal file
View File

@@ -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")

19
web/main.py Normal file
View File

@@ -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")

9
web/view.py Normal file
View File

@@ -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)])
}

41
web/views/main_view.py Normal file
View File

@@ -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()