Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2015 03:57:09

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

Запускаю програму, перехожу в форму авторизации нажимаю кнопку логин(после ввода данных) програма виснет. Как мне считать данные о пользователях?



con = cx_Oracle.connect('test/root@localhost')
cursor = con.cursor()
cursor.execute(“select user_name,user_password from users”)
counter = cursor.execute(“SELECT COUNT(*) FROM users”)
for i,n in cursor.fetchall():

if username == i:
if password == n:
QtGui.QMessageBox.information(self, ‘BOOYA!’, ‘Success!!’)
self.close()
self.mainw = Main()
self.mainw.show()

else:
QtGui.QMessageBox.warning(self, ‘Dang it!’, ‘Password incorrect…’)
return

Офлайн

#2 Дек. 20, 2015 05:26:38

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

Во первых, код надо постить на форумах в тегах code, иначе отступы пропадают и ваш код можно и не понять.
Во вторых, у вас ошибка - вы делаете два запроса одним и тем же курсором и после этого пытаетесь получить результат первого запроса,в то время как в курсоре лежит результат последнего запроса.
В третьих, вы в целом не правильно решаете задачу - зачем опрашивать ВСЕ записи о пользователях и паролях, что бы потом в цикле перебирать? Вам нужно сделать запрос в котором вы уже выберите пользователя, и потом проверять сходство пароля.
В четверых, держать пароли в базе в открытом виде это не безопасно, может это ваш домашний проект и это не столь играет роли, но на будущее помните. что современный стандарт это держать в базе “подсоленую” хэш сумму пароля



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 20, 2015 09:02:14

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

JOHN_16
Во первых, код надо постить на форумах в тегах code, иначе отступы пропадают и ваш код можно и не понять.Во вторых, у вас ошибка - вы делаете два запроса одним и тем же курсором и после этого пытаетесь получить результат первого запроса,в то время как в курсоре лежит результат последнего запроса.В третьих, вы в целом не правильно решаете задачу - зачем опрашивать ВСЕ записи о пользователях и паролях, что бы потом в цикле перебирать? Вам нужно сделать запрос в котором вы уже выберите пользователя, и потом проверять сходство пароля.В четверых, держать пароли в базе в открытом виде это не безопасно, может это ваш домашний проект и это не столь играет роли, но на будущее помните. что современный стандарт это держать в базе “подсоленую” хэш сумму пароля

 con = cx_Oracle.connect('test/root@localhost')
cursor = con.cursor()
cursor.execute("select user_name,user_password from users")

for i,n in cursor.fetchall():

if username == i:
if password == n:
QtGui.QMessageBox.information(self, 'BOOYA!', 'Success!!')
self.close()
self.mainw = Main()
self.mainw.show()

else:
QtGui.QMessageBox.warning(self, 'Dang it!', 'Password incorrect...')
return

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

Офлайн

#4 Дек. 20, 2015 09:59:22

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

примерно так:

cursor.execute(select user_password from users WHERE user_name=?”, (username,) )
pw = cursor.fetchone()
if pw and pw == n:
    ...



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Дек. 20, 2015 10:25:17

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

Спасибо. Может посоветуете что-то почитать? Желательно с примерами

Офлайн

#6 Дек. 20, 2015 11:09:57

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

brutalsuperman
По теме БД? В моем блоге найдите запись про Sqlite3, вам будет полезна. В остальном не подскажу ибо не осведомлен.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Дек. 20, 2015 11:55:05

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

JOHN_16
cursor.execute(“select user_password from users WHERE user_name=?”, (username,) )
pw = cursor.fetchone()
if pw and pw == n:
...

А что за переменная n? И как я понял второй pw - пароль?
JOHN_16
По теме БД? В моем блоге найдите запись про Sqlite3, вам будет полезна. В остальном не подскажу ибо не осведомлен.

JOHN_16
По теме БД? В моем блоге найдите запись про Sqlite3, вам будет полезна. В остальном не подскажу ибо не осведомлен.

Меня больше интересует cx_oracle, так как работаю с Oracle, а mysql под запретом)

Офлайн

#8 Дек. 20, 2015 23:40:07

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

brutalsuperman
А что за переменная n? И как я понял второй pw - пароль?
n из вашего примера, pw пароль из БД
brutalsuperman
Меня больше интересует cx_oracle, так как работаю с Oracle, а mysql под запретом)
Интернет в помощь - офиц.документация и гугл. И да там на английском скорее всего все.

А то что в письме написали - метод подстановки другой в cx_oracle:
cx_Oracle.paramstyle

String constant stating the type of parameter marker formatting expected by the interface. Currently ‘named’ as in ‘where name = :name’.
Часть II. Запросы с параметрами.
——————————–

Согласно спецификации Python Database API 2.0, для выполнения запросов
с параметрами каждый модуль должен реализовывать переменную
paramstyle, которая определяет каким образом будут передаваться
параметры запросов. Текущая версия cx_Oracle(3.0) поддерживает режим
‘named’, то есть в модуле установлена переменная
cx_Oracle.paramstyle='named' и можно создавать конструкции в запросах
в виде:

select * from all_users where USERNAME LIKE :S

При этом связывание параметров запроса со значениями можно можно
выполнить двумя способами:
* Именованный параметeр метода execute:

cursor2.execute(“select * from all_users where USERNAME LIKE :S ”,S='S%')
* Словарь {':переменная':значение,…}

cursor2.execute(“select * from all_users where USERNAME LIKE :S ”,{':S':'S%'})



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Дек. 21, 2015 01:04:08

brutalsuperman
От: Киев
Зарегистрирован: 2015-12-20
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация python+ cx_oracle

JOHN_16
Спасибо, уже разобрался. Проблема была в том что считывало в поле ввода user11 а для сравнения с базы брало user11____ Подчеркивание ето пробелы.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version