2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42

Получение значения аргумента из одной функции в другой внутри класса

17.07.2022, 01:02. Показов 937. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый день!
Прошу помочь по возможности...
Сделал POST-запросы на регистрацию и авторизацию пользователя на сайте. Регистрация проходит успешно...
Данные для авторизации генерируются случайно через библиотеку fake...
Мне нужно для функции авторизации получить значения пароля и емайл, используемые при регистрации в другой функции.
Что-то не выходит...
Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class RegisterUser:
    @staticmethod  # Фикстура создаёт и возвращает новый объект
    def random():  # Функция генерирует каждый раз валидные данные
        name = fake.name()
        email = fake.email()
        password = fake.password()
        return {"name": name, "email": email, "pass": password}
 
 
class Register:
    def __init__(self):
        self.base_url = "https://...url.../"
 
    def register_user(self) -> json:  # Регистрация пользователя
        data = RegisterUser.random()
        res = requests.post(self.base_url+'new_user', data=data)
        status = res.status_code
        try:
            result = res.json()
        except json.decoder.JSONDecodeError:
            result = res.text
        return status, result, data
 
 
    def authorization(self):  # Авторизация пользователя - email, password
        data = Register().register_user()  # Пробую вернуть значения data, аналогичные в функции register_user
        params = {'email': data['email'], 'pass': data['pass']}  # Здесь ошибка выходит...
        res = requests.post(self.base_url + 'login', data=params)
        status = res.status_code
        try:
            result = res.json()
        except json.decoder.JSONDecodeError:
            result = res.text
        return status, result, params
Ошибка:
Python
1
2
>       params = {'email': data['email'], 'pass': data['pass']}
E       TypeError: tuple indices must be integers or slices, not str
Не пойму, как эту ошибку исправить.
В целом нужно получить аналогичные значения пароля и емайла, которые использовались при регистрации и передать их в запросе на авторизацию... ))
Подскажите пож-та, как можно поправить ))
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2022, 01:02
Ответы с готовыми решениями:

Получение значения из одного класса в другой
Например у меня есть класс ключ. Если я нажимаю на ключ то объект удаляется и значение переменной становится true. Как мне передать...

Вызов одной функции внутри другой
function sold(p,n){ alert('test'); var z=n-1; for( ;z!=-1;z--){ ...

Получение переменной из одной функции в другой
Тут у меня проблемка. Я в одной функции создал переменную и хочу ее использовать в другой функции. Я использовали nonlocal, но что то не...

6
2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42
17.07.2022, 08:57  [ТС]
Поправка запроса выше...
Данные для авторизации регистрации генерируются случайно через библиотеку fake...

У меня конечно получается использовать глобальную переменную, в функции register_user:
Python
1
2
global idata
idata = {'email': data['email'], 'pass': data['pass']}
А в функции authorization вывести её:
Python
1
2
params = idata
res = requests.post(self.base_url + 'login', data=params)
Но основываясь на более оптимальном подходе, хотелось бы сделать получение значения idata в функции authorization без использования global...
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
17.07.2022, 10:43
Python
1
params = {'email': data[2]['email'], 'pass': data[2]['pass']}
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,695
Записей в блоге: 29
17.07.2022, 10:48
Лучший ответ Сообщение было отмечено vbYesNo как решение

Решение

vbYesNo, класс не нужен, ради одной статической функции его не пишут, сделай просто функцию. К тому же он обманывает пользователя так как никого не регистрирует.
Класс Регистер тоже не верный, так как он еще умеет и авторизовывать, а должен уметь что-то одно.
В его ините вызывай функцию генерации и сохраняй данные. Эти данные используй в методах регистер и аус.
1
2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42
17.07.2022, 11:32  [ТС]
А как значение переменной data можно сохранить в init?
Что-то не выходит, разные рег. данные на выходе получаются:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Register:
    def __init__(self):
        self.data = RegisterUser.random()
        self.base_url = "https://...url.../"
 
    def register_user(self) -> json:
        res = requests.post(self.base_url + 'new_user', data=self.data)
        status = res.status_code
        try:
            result = res.json()
        except json.decoder.JSONDecodeError:
            result = res.text
        return status, result, self.data
 
 
    def authorization(self):
        params = {'email': self.data['email'], 'pass': self.data['pass']}
        res = requests.post(self.base_url + 'login', data=params)
        status = res.status_code
        try:
            result = res.json()
        except json.decoder.JSONDecodeError:
            result = res.text
        return status, result, params
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,695
Записей в блоге: 29
17.07.2022, 12:32
Цитата Сообщение от vbYesNo Посмотреть сообщение
Что-то не выходит, разные рег. данные на выходе получаются:
не верю. покажи остальной код, где объекты создаешь и используешь.
0
2 / 2 / 0
Регистрация: 24.02.2017
Сообщений: 42
17.07.2022, 12:56  [ТС]
Вот так получилось...
Вынес "data = RegisterUser.random()" в корень класса Register из функции __init__:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Register:
    data = RegisterUser.random()
 
    def __init__(self):
        self.base_url = "https://...url.../"
 
    def register_user(self) -> json:
        res = requests.post(self.base_url + 'new_user', data=self.data)
        status = res.status_code
        try:
            result = res.json()
        except json.decoder.JSONDecodeError:
            result = res.text
        return status, result, self.data
 
 
    def authorization(self):
        params = {'email': self.data['email'], 'pass': self.data['pass']}
        res = requests.post(self.base_url + 'login', data=params)
        status = res.status_code
        try:
            result = res.json()
        except json.decoder.JSONDecodeError:
            result = res.text
        return status, result, params
Теперь данные (лог и пароль), полученные при регистрации сохраняются для авторизации... ))
Мерси боку!!!

Добавлено через 5 минут
Да это весь код... Шапка правда в первом сообщении...где fake генерируется...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2022, 12:56
Помогаю со студенческими работами здесь

Вычислить значения функции при значениях аргумента, заданных в одном массиве, и поместить их в другой массив
Задан целочисленный массив Х размером 5 элементов. Элементы массива Х вводятся с клавиатуры.Вычислить значение функции y= 0.5ln x при...

Вывести график функции, значения аргумента Х, значения функции Y в виде таблицы, max и min функции
Вывести график функции, значения аргумента Х, значения функции Y в виде таблицы, max и min функции: y= 10/(1+x*x) диапазон изменения...

Как сравнить параметры одной и той же таблицы двух экземпляров класса внутри самого класса?
Как сравнить параметры одной и той же таблицы двух экземпляров класса внутри самого класса (если это невозможно, то скажите тогда другой...

Для заданной функции K=sin(r^3)+tg(r-2,4) вывести на экран значения функции, которые больше 0,2 и соответствующие им значения аргумента на отрезке
Для заданной функции K=sin(r^3)+tg(r-2,4) вывести на экран значения функции, которые больше 0,2 и соответствующие им значения аргумента на...

Для заданной функции вывести значения функции которые лежат в пределах и соответствующие им значения аргумента
Для заданной функции t=cos(m²)+sin(m+m/2.4)-√m-(1.2) вывести на экран значения функции которые лежат в пределах от -2 до 0 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru