Отправка SMS в список имен, словарь номеров, а также перенос другого значения ключа

#python #twilio

Вопрос:

Итак, у меня есть функция, которая должна позволить мне отправлять несколько SMS в список словарей в моем сценарии. Так, например, мой список словарей выглядит следующим образом

 users = [{'User': entry.name.value, 'Number':entry.telephoneNumber.value, 'days':days_left.days}]
 

и у меня есть функция в классе, которая будет отправлять sms на каждый номер телефона в списке словарей, но в каждом sms она найдет и прикрепит нужное имя и оставшиеся дни.

         def send_sms():
            client = Client(twilio_account_sid, twilio_auth_token)
            for d in users:
                for name, number in d.items():
                    message = client.messages.create(
                        to=number,
                        from_=twilio_from_phone_number,
                        body=f'Hello {name}, you have {days_left.days} days left to reset your password. -IT')
                    print(message.sid)
            self.app.log.info(f'Sent {len(users)} sms msgs to users')
        send_sms()
 

поэтому я немного разбираюсь в логике внутри функции. Мне нужно иметь доступ к отдельным именам и оставшимся дням. Для справки:

 days_left = (pwd_expire_date.astimezone(tz=None) - today)
 

осталось дней = время истечения срока действия пароля каждого пользователя — сегодняшняя дата(с учетом того, сколько дней у них осталось)
Это скрипт для доступа к объявлению и проверки пароля пользователя в течение 30,15,3 дней, и если это так, отправьте им SMS и уведомление по электронной почте. Это моя первая настоящая задача как инженера, и это немного больше, чем я понимаю. Я знаю, что моя логика цикла for неверна, потому что она просто захватывает ключ, значение. Но как бы я повторил свой список словарей и извлек соответствующие значения? PS(Тело-всего лишь пример). Я не уверен, что у вас будет MWE, потому что это связано с моим объявлением, но я думаю, что моя проблема связана с базовым синтаксисом python. Спасибо за любую помощь. Если это глупый вопрос, я прошу прощения.

Мой ожидаемый результат таков :

 Each user receive a SMS to their specific number, with their name and days till they have to reset their password.

'Hello John, you have 15 days left to reset your password. -IT'

 

Ответ №1:

Евангелист-разработчик Twilio здесь.

Я думаю, что ваш код в основном верен! Ваш цикл по пользователям for d in users: кажется мне правильным. На этом этапе вы должны найти, что d это словарь пользовательских данных.

Я думаю, что ваша проблема заключается в использовании for name, number in d.items(): . Вместо того, чтобы пытаться получить данные из массива .items() возвращаемых кортежей, будет сложно. Вместо этого вы можете получить доступ к данным из словаря напрямую, используя квадратные скобки (или get метод) и имя поля, например d["Username"] . Попробуй это:

 def send_sms():
    client = Client(twilio_account_sid, twilio_auth_token)
    for d in users:
        message = client.messages.create(
            to=d["Number"],
            from_=twilio_from_phone_number,
            body=f'Hello {d["Username"]}, you have {d["days"]} days left to reset your password. -IT')
        print(message.sid)
    self.app.log.info(f'Sent {len(users)} sms msgs to users')

send_sms()
 

Комментарии:

1. Вау, Фил, спасибо тебе! Теперь в этом так много смысла, и, похоже, у меня есть результат, который я ищу! Я просто неправильно смотрел на логику.