Файл: Лабораторная работа 03 по о. 12 программирование критических сервисов Студент гр. Ист114 Медведева С. Г.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 42

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Кафедра информационных управляющих систем


Лабораторная работа № 03


по Б1.О.12 «ПРОГРАММИРОВАНИЕ КРИТИЧЕСКИХ СЕРВИСОВ»

Студент гр.ИСТ-114_____________________________ Медведева С.Г.

(подпись)

Проверил ___________________________ А. В. Параничев

(оценка и подпись)

Санкт-Петербург

2023 год

Создание прототипа GUI сервиса на языке Python

Создание прототипа GUI сервиса «Разработка веб-приложения авторизации по логин-паролю с подсказкой в сервисе подбора домашних растений» выполнено на языке Python с помощью IDE PyCharm

После добавления нового модуля в среде PyCharm: File->New->Python file->Python file с именем gui_lab3, определен код на основе графической библиотеки tkinter:

import sqlite3 as sl

from tkinter import *

from tkinter.ttk import Checkbutton

from tkinter import messagebox

import sqlite3

class gui_data_00:

_flag_gui = 1

def read_hint_pass(self, People_Login):

try:

sqlite_connection = sqlite3.connect('thecode.db')

cursor = sqlite_connection.cursor()

print("Подключен к SQLite")

sqlite_select_query = """SELECT * from People where People_Login = ?"""

cursor.execute(sqlite_select_query, (People_Login,))

result = cursor.fetchone()

if result is None:

return -1

else:

return result[4]

except sqlite3.Error as error:

print("Ошибка при работе с SQLite", error)

return -2

finally:

if sqlite_connection:

sqlite_connection.close()

print("Соединение с SQLite закрыто")

def read_user_name(self, People_Login, People_Password):

try:

sqlite_connection = sqlite3.connect('thecode.db')

cursor = sqlite_connection.cursor()

print("Подключен к SQLite")

sqlite_select_query = """SELECT * from People where People_Login = ? """

cursor.execute(sqlite_select_query, (People_Login,))

result = cursor.fetchone()

if result is None:

return -1

else:

if result[2] == People_Password:

return 0

else:

return -2

except sqlite3.Error as error:

print("Ошибка при работе с SQLite", error)

return -3

finally:

if sqlite_connection:

sqlite_connection.close()

print("Соединение с SQLite закрыто")

def chkHintPassword_changed(self):

if check_hint_pass_state.get() == 1:

uname = ent_user_name.get()

if uname == '':

messagebox.showinfo('Ругательство', 'Пустое поле')

check_hint_pass_state.set(0)

return -1

elif self.read_hint_pass(uname) == -1:

messagebox.showinfo('Ругательство', 'Пользователя нет в БД')

check_hint_pass_state.set(0)

return -2

else:

messagebox.showinfo('Подсказка', self.read_hint_pass(uname))

return 0

check_hint_pass_state.set(0)

def btn_login_clicked(self):


uname = ent_user_name.get()

passw = ent_user_password.get()

if uname == '' or passw == '':

messagebox.showinfo('Ругательство', 'Пустое поле')

return -1

elif self.read_user_name(uname, passw) == -1:

messagebox.showinfo('Ругательство', 'Пользователя нет в БД')

elif self.read_user_name(uname, passw) == -2:

messagebox.showinfo('Ругательство', 'Неверный пароль')

elif self.read_user_name(uname, passw) == 0:

messagebox.showinfo('Похвала', 'Вы вошли!')

def fooooooo(self):

window = Tk()

window.geometry('600x400')

window.title("Авторизация в приложение по подбору растений")

# инициализация объектов

global ent_user_name

ent_user_name = Entry(window, width=30)

global ent_user_password

ent_user_password = Entry(window, width=30, show="*")

global check_hint_pass_state

check_hint_pass_state = IntVar()

lbl_user_name = Label(window, text="UserName:", width=10)

lbl_user_password = Label(window, text="Password:", width=10)

btn_login = Button(window, width=10, text="Login", command=self.btn_login_clicked)

chk_hint_password = Checkbutton(window, text="Подсказка для пароля", width=20,

variable=check_hint_pass_state, command=self.chkHintPassword_changed)

# расположение объектов

lbl_user_name.grid(column=0, row=0)

ent_user_name.grid(row=0, column=1, columnspan=3)

lbl_user_password.grid(column=0, row=1)

ent_user_password.grid(column=1, row=1, columnspan=3)

chk_hint_password.grid(row=2, column=0, columnspan=2)

btn_login.grid(column=2, row=2)

if (self._flag_gui == 1):

window.mainloop()

def init_db(self):

con = sl.connect('thecode.db')

with con:

data = con.execute("select count(*) from sqlite_master where type='table' and name='People'")

for row in data:

if row[0] == 0:

con.execute("""

CREATE TABLE IF NOT EXISTS People (

People_id INTEGER PRIMARY KEY,

People_FIO VARCHAR(100),

People_Password VARCHAR(20),

People_Login VARCHAR(20),

People_Login_Reset_Phrase VARCHAR(60)

);

""")

sql = "INSERT INTO People (People_id, People_FIO, People_Password," \

" People_Login, People_Login_Reset_Phrase) values(?, ?, ?, ?, ?)"

# указываем данные для запроса

data = [

(0, 'Максимов Егор Евгеньевич', '123456', 'Burgher', '(654321) обратная матрица'),

(1, 'Медведева София Григорьева', '24082002', 'Starets', 'День рождения любимого человека'),

(2, 'Верещагин Роман Александрович', 'VerRomAle', 'Verech', 'ФИО три буквы'),

(3, 'Смагин Илья Владимирович', 'StrongPassword', 'lalacode', 'СильныйПароль')

]

with con:

con.executemany(sql, data)

con.close()

# вызов функции формы

if __name__ == '__main__':

log_form = gui_data_00()

log_form.init_db()

log_form.fooooooo()

Скриншот запуска сервиса представлен на рис. 1, фрагмент работы модуля “Подсказка пароля” показан на рис. 2.



Рис. 1. Скриншот запуска модуля авторизация сервиса «Авторизации с подсказкой пароля для сервиса подбора растений» с помощью IDE PyCharm Free Community



Рис. 2. Фрагмент работы модуля Подсказка пароля сервиса «Авторизации с подсказкой пароля для сервиса подбора растений» в среде PyCharm Free Community



На рис. 1 и 2 графические элементы отображены с помощью следующих строк кода:

  • кнопка с текстом (Button) "Login" создается с помощью следующих параметров::

    • размеры кнопки:10;

    • событие btnLogin_clicked, установленное при нажатии копки.

  • окно редактирования (Entry) entUserPassword для ввода пароля создается следующим образом:

    • размеры окна редактирования:30;

    • метод отображение текста «*»;

  • окно редактирования (Entry) entUserName для ввода логина создается следующим образом:

    • размеры окна редактирования:30;

  • окно текста (Label) lblUserName, lblUserPassword для отображения текста создается следующим образом:

    • размеры окна редактирования:30;

    • свойство text для отображения текста;

  • Переключатель с текстом (Checkbutton) “Подсказка пароля” создается следующим образом:

    • размеры окна редактирования:20;

    • событие chkHintPassword_changed, установленное при переводе переключателя в состояние с галочкой;

    • свойство text для отображения текста "Подсказка для пароля";

ВЫВОД

readHintPass:

- Правильный логин (существует в базе данных, возвращает подсказку пароля)

- Неправильный логин (не существует в базе данных, возвращает -1)

- Ошибка при работе с SQLite (возвращает -2)

readUserName:

- Правильный логин и правильный пароль (возвращает 0)

- Неправильный логин (не существует в базе данных, возвращает -1)

- Неправильный пароль (логин существует в базе данных, но не совпадает с паролем, возвращает -2)

- Ошибка при работе с SQLite (возвращает -3)

hkHintPassword_changed:

-Пустое поле (возвращает -1)

-Неправильный логин, не существует в базе данных (возвращает -2)

-Правильный логин (возвращает 0)

btnLogin_clicked:

- Пустые поля (возвращает -3)

-Неправильный логин, не существует в базе данных (возвращает -1)

-Неправильный логин, не существует в базе данных (возвращает -2)

- Правильный пароль (возвращает 0)