flet web test
This commit is contained in:
221
web/designer.py
Normal file
221
web/designer.py
Normal 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
7
web/info.py
Normal 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
19
web/main.py
Normal 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
9
web/view.py
Normal 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
41
web/views/main_view.py
Normal 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()
|
||||||
|
|
||||||
Reference in New Issue
Block a user