Задать вопрос
@Leonid2512

Почему не появляется сообщение при неправильной авторизации?

Хотел создать приложение для регистрации и авторизации пользователей, и поэтому решил добавить всплывающее окно когда данные при авторизации введены неверно, однако при тесте и намеренном вводе неверных данных не появляется всплывающее окно. Вообще не понимаю что делать. Подскажите как правильно сделать, чтобы без огромных правок если возможно.

import flet as ft
import sqlite3
def main(page: ft.Page):
    page.title = 'messapp'
    page.theme_mode = 'dark'
    page.vertical_alignment = ft.MainAxisAlignment.CENTER
    page.window.width = 350
    page.window.height = 450
    page.window.resizable = False

    def register(e):
        bd = sqlite3.connect('mess.u')
        cur = bd.cursor()
        cur.execute("""CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY,
            login TEXT,
            pass TEXT
        )""")
        cur.execute(f"INSERT INTO users VALUES(NULL, '{us_log.value}', '{us_pass.value}')")
        bd.commit()
        bd.close()

        us_log.value = ''
        us_pass.value = ''
        page.update()
    def validate(e):
        if all([us_log.value, us_pass.value]):
            btn_reg.disabled = False
            btn_auth.disabled = False
        else:
            btn_reg.disabled = True
            btn_auth.disabled = True
        page.update()
    def auth_user(e):
        bd = sqlite3.connect('mess.u')
        cur = bd.cursor()
        cur.execute(f"SELECT * FROM users WHERE login = '{us_log.value}' AND pass = '{us_pass.value}'")
        if cur.fetchone() != None:
            us_log.value = ''
            us_pass.value = ''
            page.update()
        else:
            page.snack_bar = ft.SnackBar(ft.Text('ERROR IN DATA'))
            page.snack_bar.open = True
            page.update
        bd.commit()
        bd.close()
        
    us_log = ft.TextField(label='Login', width=200, on_change=validate)
    us_pass = ft.TextField(label='Password', password=True, width = 200, on_change=validate)
    btn_reg = ft.OutlinedButton('Add', width = 150, on_click=register, disabled=True)
    btn_auth = ft.OutlinedButton('Authorize', width = 150, on_click=auth_user, disabled=True)

    panel_register = ft.Row(
        [
            ft.Column(
                [
                    ft.Text('Registration'),
                    us_log,
                    us_pass,
                    btn_reg
                ]
            )
        ],
        alignment=ft.MainAxisAlignment.CENTER
    )
    panel_auth = ft.Row(
        [
            ft.Column(
                [
                    ft.Text('Authorization'),
                    us_log,
                    us_pass,
                    btn_auth
                ]
            )
        ],
        alignment=ft.MainAxisAlignment.CENTER
    )

    page.add(panel_auth)
ft.app(target = main)
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
забыл скобки: в else у тебя page.update без вызова — это просто ссылка на метод, страница не обновляется и снекбар не всплывает. Нужно page.update().

заодно поправь SQL — логин и пароль сейчас летят в запрос через f-строку, это готовая SQL-инъекция. Возьми параметризованный запрос:
cur.execute("SELECT * FROM users WHERE login=? AND pass=?", (us_log.value, us_pass.value))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы