Съемка и монтаж: Глеб Лиманский

На предыдущем 11-м занятии мы отправляли госконтракты себе на почту. И данные для входа в свою почту — логин и пароль — мы прописывали прямо в коде.

Это небезопасно, потому что мы этот код можем кому-то отправить, выложить на GitHub и забыть про то, что у нас там личные данные. Поэтому всегда, когда требуется ввод личных данных, принято хранить их в отдельном файле, который, в отличие от кода, никуда не передается.

Первым шагом переместим все переменные (в нашем случае логин и пароль) в файл config.py, чтобы их было удобно редактировать в одном месте. Если эта переменная будет использована в каких-то других файлах, мы сможем не заходить отдельно в каждый из них, чтобы что-то поменять, а будем изменять все в одном месте — config.py.

Примечание: в этом уроке пароль и почта ненастоящие.

После того как мы перенесли логин и пароль в файл config.py, удалим эти строки из основного файла, который отправляет госконтракты на почту (send_email.py) и в начало добавим строку импорта этих данных из файла config.py. Не забываем сохранять изменения командой Ctrl + S или Command + S.

На этом уроке мы не будем отправлять контракты, а только потренируемся импортировать логины и пароли в код безопасным способом. Поэтому закомментируем последние строки файла send_email.py, которые непосредственно отвечают за отправку контрактов на почту, а вместо этого выведем две строки с print: просто распечатаем почту и пароль, чтобы убедиться, что они корректно передаются в программу.

Попробуем распечатать логи и пароль, запустив программу send_emial.py в терминале (не забудьте указать путь к папке, в которой она находится). Логин и пароль корректно передаются.

Мы переместили все переменные в один файл config, и теперь нам удобно их менять, чтобы изменения отображались во всех файлах. Но это по-прежнему код, который нам может потребоваться куда-то выложить и передать. И персональные данные принято передавать через переменные окружения (environment variables, их еще переводят как переменные среды).

Когда любая программа запускается, то ей передаются некие переменные, которые описывают ее окружение: где она запущена, на какой операционной системе, из какой папки, при каких обстоятельствах и так далее. Эти переменные можно увидеть, если ввести в терминале команду env.

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

Для этого создаем файл .env и теперь туда записываем логин и пароль. Этот файл мы никому не будем передавать и будем его беречь от посторонних.

Устанавливаем библиотеку python-dotenv командой pip3 install python-dotenv.

Теперь в файле config убираем свои логины пароли и меняем на следующие строки:

Сохраняем все изменения в файлах config и .env. Теперь логин и пароль автоматически будут подтягиваться из файла .env через переменные окружения. Проверим, запустив программу send_email.py. Логин и пароль распечатались.

Теперь наша программа может отправлять контракты безопасным способом, и мы не рискуем потерять свои персональные данные. Если у вас остались вопросы, заходите в наш в Telegram-чат.