test ferst
This commit is contained in:
76
web/views/login.py
Normal file
76
web/views/login.py
Normal file
@@ -0,0 +1,76 @@
|
||||
import flet as ft
|
||||
import designer as d
|
||||
import api_client as api
|
||||
|
||||
|
||||
class LoginView:
|
||||
def __init__(self, page: ft.Page):
|
||||
self.page = page
|
||||
self._username = d.text_field("Логин", prefix_icon=ft.icons.PERSON_OUTLINE)
|
||||
self._password = d.text_field("Пароль", password=True, prefix_icon=ft.icons.LOCK_OUTLINE)
|
||||
self._error = ft.Text("", color=d.ERROR, size=13)
|
||||
self._btn = d.btn_primary("Войти", on_click=self._on_login, width=280)
|
||||
|
||||
def build_page_view(self) -> ft.View:
|
||||
self._username.on_submit = self._on_login
|
||||
self._password.on_submit = self._on_login
|
||||
|
||||
form = ft.Container(
|
||||
content=ft.Column(
|
||||
[
|
||||
ft.Icon(ft.icons.NEWSPAPER, size=56, color=d.PRIMARY),
|
||||
d.headline("Новостная CMS", size=24),
|
||||
d.caption("Войдите в панель управления", color=d.TEXT_SECONDARY),
|
||||
ft.Divider(height=20, color="transparent"),
|
||||
self._username,
|
||||
self._password,
|
||||
self._error,
|
||||
ft.Divider(height=8, color="transparent"),
|
||||
self._btn,
|
||||
],
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
spacing=14,
|
||||
width=320,
|
||||
),
|
||||
bgcolor=d.SURFACE,
|
||||
border_radius=16,
|
||||
padding=40,
|
||||
shadow=ft.BoxShadow(blur_radius=24, color=ft.colors.with_opacity(0.10, ft.colors.BLACK)),
|
||||
)
|
||||
|
||||
return ft.View(
|
||||
route="/admin/login",
|
||||
bgcolor=d.BACKGROUND,
|
||||
controls=[
|
||||
ft.Container(
|
||||
content=form,
|
||||
alignment=ft.alignment.center,
|
||||
expand=True,
|
||||
)
|
||||
],
|
||||
vertical_alignment=ft.MainAxisAlignment.CENTER,
|
||||
horizontal_alignment=ft.CrossAxisAlignment.CENTER,
|
||||
)
|
||||
|
||||
async def _on_login(self, e=None):
|
||||
self._error.value = ""
|
||||
username = self._username.value.strip()
|
||||
password = self._password.value.strip()
|
||||
if not username or not password:
|
||||
self._error.value = "Заполните все поля"
|
||||
self.page.update()
|
||||
return
|
||||
|
||||
self._btn.disabled = True
|
||||
self.page.update()
|
||||
|
||||
token = await api.admin_login(username, password)
|
||||
self._btn.disabled = False
|
||||
|
||||
if token:
|
||||
self.page.session.set("token", token)
|
||||
self.page.session.set("username", username)
|
||||
self.page.go("/admin")
|
||||
else:
|
||||
self._error.value = "Неверный логин или пароль"
|
||||
self.page.update()
|
||||
Reference in New Issue
Block a user