{"componentChunkName":"component---src-templates-material-js","path":"/workshops/2021/07/27/pishem-svoego-robota-na-python-urok-12/index.html","result":{"pageContext":{"pageParameters":{"isPreview":false,"isMirror":true,"delay_to_show_donate_popup_seconds":7,"about_page":false,"games_page":true,"games_page_link_in_header":false,"donate_popup_show_ru":true,"donate_popup_title_ru":"Без вас — нас не будет","donate_popup_content_ru":"Помогите нам добывать и рассказывать важные истории. Участие каждого — важно!","donate_popup_show_en":true,"donate_popup_title_en":"We can’t do it alone!","donate_popup_content_en":"Help us uncover and share the stories that matter. Every contribution makes a difference","display_regular_donors_banner":false,"showPatreonMethod":true,"useNewMaterialDonationBanner":true,"new_donations_page_design":true,"donations_popup_variants":{"ru":[{"id":"kc19b","title":"Сохраните журналистику для людей в России ","subtitle":"Читают нас прежде всего люди в России, но будущее «Важных историй» зависит от тех, кто живет за пределами страны. Поддержите нас ежемесячным донатом — сохраните независимую журналистику для ваших близких, которые остаются в России.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"},{"id":"33tc9","title":"У пропаганды есть миллиарды из бюджета. У нас — только вы","subtitle":"Перемены возможны, если независимые от власти журналисты продолжают свою работу день за днем, год за годом. Мы рассказываем важные истории уже шесть лет. Помогите нам продолжать.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"}],"en":[{"id":"nj1py","title":"Important stories don’t tell themselves","subtitle":"Independent journalism comes at a cost. We answer to no owners or advertisers — only to you, our readers.  Your ongoing support allows us to keep exposing the truth. Without you, we won’t be here.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"},{"id":"xdfc1","title":"Help us outlast the Kremlin censorship","subtitle":"Censorship lose to journalism that keeps showing up, year after year. Monthly donors are what make that possible","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"},{"id":"ck121","title":"State propaganda has billions to spend. We have only you to rely on","subtitle":"Change happens when independent journalists keep showing up — day after day, year after year. Six years in, we're still showing up. Help us keep going with a monthly donation.","is_active":true,"background":"linear-gradient(10deg, #421f20 5%, #994146)"}]},"feedback_page":true,"donorsCount":0,"showAuthorsRequestAfterMaterial":true,"radioPage":true,"radioExists":{"ru":true,"en":false},"singlePlaylistPath":{"ru":"/radio/2025/12/22/razgovori-ovazhnikh/index.html"},"with_bookmarks":true,"news_feed":true,"news_feed_skeleton":false,"news_page_redesign":true,"with_topics":true,"materials_topics":false,"topics_page":true,"with_pdf_share":false,"with_native_share":false,"preferred_source_page":true,"charon_new_form":true,"preferred_source_promos":true,"charon_en_page":true},"pk":295,"header":"Пишем своего робота на Python. Урок 12","lead":"Учимся работать с личными данными при написании кода: узнаем, как безопасно обращаться к логинам, паролям и любым персональным данным через переменные окружения.","category":"workshops","entry_image":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1920x960px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1920x960px_2x.webp","for_width":1920,"for_height":960,"real_width_1x":1920,"real_width_2x":3840,"real_height_1x":960,"real_height_2x":1920},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1920x960px_1x.png","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1920x960px_2x.png","for_width":1920,"for_height":960,"real_width_1x":1920,"real_width_2x":3840,"real_height_1x":960,"real_height_2x":1920},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1272x636px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1272x636px_2x.webp","for_width":1272,"for_height":636,"real_width_1x":1272,"real_width_2x":2544,"real_height_1x":636,"real_height_2x":1272},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1272x636px_1x.png","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-1272x636px_2x.png","for_width":1272,"for_height":636,"real_width_1x":1272,"real_width_2x":2544,"real_height_1x":636,"real_height_2x":1272},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-912x456px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-912x456px_2x.webp","for_width":912,"for_height":456,"real_width_1x":912,"real_width_2x":1824,"real_height_1x":456,"real_height_2x":912},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-912x456px_1x.png","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-912x456px_2x.png","for_width":912,"for_height":456,"real_width_1x":912,"real_width_2x":1824,"real_height_1x":456,"real_height_2x":912},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-600x400px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-600x400px_2x.webp","for_width":600,"for_height":400,"real_width_1x":600,"real_width_2x":1200,"real_height_1x":400,"real_height_2x":800},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-600x400px_1x.png","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-600x400px_2x.png","for_width":600,"for_height":400,"real_width_1x":600,"real_width_2x":1200,"real_height_1x":400,"real_height_2x":800},{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-360x360px_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-360x360px_2x.webp","for_width":360,"for_height":360,"real_width_1x":360,"real_width_2x":720,"real_height_1x":360,"real_height_2x":720},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-360x360px_1x.png","url_2x":"https://static.istories.media/uploaded/images/f5fb65807fa141d39942720027a5a075-360x360px_2x.png","for_width":360,"for_height":360,"real_width_1x":360,"real_width_2x":720,"real_height_1x":360,"real_height_2x":720}],"entry_image_credit":"","blocks":[{"data":{"id":2671,"data":{"url":"https://www.youtube.com/embed/NpjHelVCCRU","text":"Съемка и монтаж: Глеб Лиманский","provider":"youtube","rawInput":"https://www.youtube.com/watch?v=NpjHelVCCRU","ratio_mobile":"16:9","ratio_desktop":"16:9"},"category":"video-embed"},"type":"video-embed"},{"data":"На предыдущем <a href=\"https://istories.media/workshops/2021/07/09/pishem-svoego-robota-na-python-urok-11/\" data-type=\"usual\" target=\"_blank\">11-м занятии</a> мы отправляли госконтракты себе на почту. И данные для входа в свою почту — логин и пароль — мы прописывали прямо в коде. ","type":"p","className":""},{"data":{"id":2661,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/8595cb3460e4477e8bd2b0f397f07e39-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/8595cb3460e4477e8bd2b0f397f07e39-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":586,"real_height_2x":1172},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/8595cb3460e4477e8bd2b0f397f07e39-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/8595cb3460e4477e8bd2b0f397f07e39-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":586,"real_height_2x":1172}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Это небезопасно, потому что мы этот код можем кому-то отправить, выложить на GitHub и забыть про то, что у нас там личные данные. Поэтому всегда, когда требуется ввод личных данных, принято хранить их в отдельном файле, который, в отличие от кода, никуда не передается.","type":"p","className":""},{"data":"Первым шагом переместим все переменные (в нашем случае логин и пароль) в файл <strong>config.py,</strong> чтобы их было удобно редактировать в одном месте. Если эта переменная будет использована в каких-то других файлах, мы сможем не заходить отдельно в каждый из них, чтобы что-то поменять, а будем изменять все в одном месте — <strong>config.py. </strong>","type":"p","className":""},{"data":{"id":2662,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/4e4adddc763946478954e7783a497be9-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/4e4adddc763946478954e7783a497be9-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":143,"real_height_2x":286},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/4e4adddc763946478954e7783a497be9-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/4e4adddc763946478954e7783a497be9-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":143,"real_height_2x":286}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Примечание: в этом уроке пароль и почта ненастоящие.","type":"p","className":""},{"data":"После того как мы перенесли логин и пароль в файл config.py, удалим эти строки из основного файла, который отправляет госконтракты на почту (<strong>send_email.py</strong>) и в начало добавим строку импорта этих данных из файла config.py. Не забываем сохранять изменения командой Ctrl + S или Command + S. ","type":"p","className":""},{"data":{"id":2663,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f25d607510084d2e8c88deec9c7d4789-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f25d607510084d2e8c88deec9c7d4789-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":577,"real_height_2x":1154},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f25d607510084d2e8c88deec9c7d4789-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/f25d607510084d2e8c88deec9c7d4789-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":577,"real_height_2x":1154}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"На этом уроке мы не будем отправлять контракты, а только потренируемся импортировать логины и пароли в код безопасным способом. Поэтому закомментируем последние строки файла <strong>send_email.py</strong>, которые непосредственно отвечают за отправку контрактов на почту, а вместо этого выведем две строки с print: просто распечатаем почту и пароль, чтобы убедиться, что они корректно передаются в программу. ","type":"p","className":""},{"data":{"id":2664,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f0b1eafa69f34d198ea44167b3d8bd5f-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f0b1eafa69f34d198ea44167b3d8bd5f-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":470,"real_height_2x":940},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f0b1eafa69f34d198ea44167b3d8bd5f-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/f0b1eafa69f34d198ea44167b3d8bd5f-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":470,"real_height_2x":940}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Попробуем распечатать логи и пароль, запустив программу <strong>send_emial.py</strong> в терминале (не забудьте указать путь к папке, в которой она находится). Логин и пароль корректно передаются. ","type":"p","className":""},{"data":{"id":2665,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/9a1eae082ea9409f902eea5f0705cb0e-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/9a1eae082ea9409f902eea5f0705cb0e-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":1046,"real_height_2x":2094},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/9a1eae082ea9409f902eea5f0705cb0e-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/9a1eae082ea9409f902eea5f0705cb0e-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":1046,"real_height_2x":2094}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Мы переместили все переменные в один файл config, и теперь нам удобно их менять, чтобы изменения отображались во всех файлах. Но это по-прежнему код, который нам может потребоваться куда-то выложить и передать. И персональные данные принято передавать через <strong>переменные окружения</strong> (environment variables, их еще переводят как переменные среды). ","type":"p","className":""},{"data":"Когда любая программа запускается, то ей передаются некие переменные, которые описывают ее окружение: где она запущена, на какой операционной системе, из какой папки, при каких обстоятельствах и так далее. Эти переменные можно увидеть, если ввести в терминале команду env.","type":"p","className":""},{"data":{"id":2666,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/a2a41bdcb2fb49a88f6abab016540b2e-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/a2a41bdcb2fb49a88f6abab016540b2e-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":507,"real_height_2x":1014},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/a2a41bdcb2fb49a88f6abab016540b2e-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/a2a41bdcb2fb49a88f6abab016540b2e-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":507,"real_height_2x":1014}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"И к этим системным переменным окружения мы можем добавить свои, чтобы они тоже передавались нашей программе при запуске. В нашем случае мы можем прописать логин и пароль в качестве таких переменных окружения.&nbsp;","type":"p","className":""},{"data":"Для этого создаем файл <strong>.env</strong> и теперь туда записываем логин и пароль. Этот файл мы никому не будем передавать и будем его беречь от посторонних.","type":"p","className":""},{"data":{"id":2667,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/29255e854c2d4bdf8b7863d83442aefb-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/29255e854c2d4bdf8b7863d83442aefb-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":153,"real_height_2x":306},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/29255e854c2d4bdf8b7863d83442aefb-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/29255e854c2d4bdf8b7863d83442aefb-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":153,"real_height_2x":306}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Устанавливаем библиотеку <strong>python-dotenv</strong> командой pip3 install python-dotenv.","type":"p","className":""},{"data":{"id":2668,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/f47e7be26d9e424281965db92259204d-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/f47e7be26d9e424281965db92259204d-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":122,"real_height_2x":244},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/f47e7be26d9e424281965db92259204d-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/f47e7be26d9e424281965db92259204d-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":122,"real_height_2x":244}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Теперь в файле config убираем свои логины пароли и меняем на следующие строки:","type":"p","className":""},{"data":{"id":2669,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/c4c6c331884145edadf7aa69f2112bfd-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/c4c6c331884145edadf7aa69f2112bfd-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":296,"real_height_2x":593},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/c4c6c331884145edadf7aa69f2112bfd-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/c4c6c331884145edadf7aa69f2112bfd-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":296,"real_height_2x":593}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Сохраняем все изменения в файлах config и .env. Теперь логин и пароль автоматически будут подтягиваться из файла .env через переменные окружения. Проверим, запустив программу send_email.py. Логин и пароль распечатались.","type":"p","className":""},{"data":{"id":2670,"data":{"images":[{"imagesList":[{"format":"webp","url_1x":"https://static.istories.media/uploaded/images/56c8c26b9ce849f0958796be9eb2b55d-1200xautopx_1x.webp","url_2x":"https://static.istories.media/uploaded/images/56c8c26b9ce849f0958796be9eb2b55d-1200xautopx_2x.webp","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":132,"real_height_2x":266},{"format":"png","url_1x":"https://static.istories.media/uploaded/images/56c8c26b9ce849f0958796be9eb2b55d-1200xautopx_1x.png","url_2x":"https://static.istories.media/uploaded/images/56c8c26b9ce849f0958796be9eb2b55d-1200xautopx_2x.png","for_width":1200,"for_height":"auto","real_width_1x":1200,"real_width_2x":2400,"real_height_1x":132,"real_height_2x":266}]}]},"category":"image-embed"},"type":"image-embed"},{"data":"Теперь наша программа может отправлять контракты безопасным способом, и мы не рискуем потерять свои персональные данные. Если у вас остались вопросы, заходите в наш в <a href=\"https://t.me/istories_helloworld\" data-type=\"usual\" target=\"_blank\">Telegram-чат</a>.","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/8b730bff976e46ef8fe9a633339572c6.pdf\" data-type=\"additional-fact\" target=\"_blank\">Sottel</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/399b574d95b945d8a07a24ecbf5c73c2.pdf\" data-type=\"additional-fact\" target=\"_blank\">Crampton</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/dd6ef65cbb20414ea5ed93297d10e914.pdf\" data-type=\"additional-fact\" target=\"_blank\">Sondale</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/6c261f52f7d246c7884880e8e896924c.pdf\" data-type=\"additional-fact\" target=\"_blank\">владели</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/2daccda026594e6bb71a044b8b0621a0.pdf\" data-type=\"additional-fact\" target=\"_blank\">сменились</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/b240b5d302a342a08143f2abc9ac966f.pdf\" data-type=\"additional-fact\" target=\"_blank\">принадлежало</a> ","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/e4a6992c5ad64a7caa1ed4ff9219b39a.pdf\" data-type=\"additional-fact\" target=\"_blank\">Sottel Services Ltd</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/b3aadadfccc6454b928c2a03e8acd94d.pdf\" data-type=\"additional-fact\" target=\"_blank\">Crampton Finance Ltd</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/705d6c9fa8e240fbb0cc7cc028598e5b.pdf\" data-type=\"additional-fact\" target=\"_blank\">Investment Advisors Ltd</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/d5d553a792da4694967e2afdc9e0cd83.pdf\" data-type=\"additional-fact\" target=\"_blank\">приобрела</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/7f873b85c8d641aeac5dfcab4ffc3d5c.pdf\" data-type=\"additional-fact\" target=\"_blank\">приобрела</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/6319630f10924ec5be445294ea750448.pdf\" data-type=\"additional-fact\" target=\"_blank\">передала</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/2ccc541ce651476b8cc1d30817d32b96.pdf\" data-type=\"additional-fact\" target=\"_blank\">продав</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/e03ec16586974e80b6a8938589d1fb30.jpeg\" data-type=\"additional-fact\" target=\"_blank\">компании</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/9c4e568a2bc84c60b44aeb0a2186a85f.pdf\" data-type=\"additional-fact\" target=\"_blank\">указал</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/408e5b42c6dc47108f68d171adc08e84.pdf\" data-type=\"additional-fact\" target=\"_blank\">China EC IX Ltd</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/65211633af45462aaeecc02cbf1c9700.pdf\" data-type=\"additional-fact\" target=\"_blank\">соцсетям</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/2381bf23d01947a3ac0ef60e031dcfc1.png\" data-type=\"additional-fact\" target=\"_blank\">показывают</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/fed112eae978439ea633f0778b3f40dc.png\" data-type=\"additional-fact\" target=\"_blank\">учредил</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/74b6bda489bf412096187b7612f893ec.png\" data-type=\"additional-fact\" target=\"_blank\">бенефициаром</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/71c28a8cbcdf4064b30c8cd160e5c7a0.png\" data-type=\"additional-fact\" target=\"_blank\">бенефициаром</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/9de2297cd9ad4b17b392ffad71af0942.png\" data-type=\"additional-fact\" target=\"_blank\">владельцем</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/c9e84958fb3343f388ab40a0a12fb3a2.png\" data-type=\"additional-fact\" target=\"_blank\">бенефициаром</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/92298d19f89d487c898e237acd4f6e41.png\" data-type=\"additional-fact\" target=\"_blank\">бенефициаром</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/39751db4c1e248d08c82a7309b748fde.png\" data-type=\"additional-fact\" target=\"_blank\">бенефициаром</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/d36ecb219e814973975b14f9ece3bd43.png\" data-type=\"additional-fact\" target=\"_blank\">бенефициаром</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/aa8fad67955d4d06bfc8d72ac1db3967.pdf\" data-type=\"additional-fact\" target=\"_blank\">через</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/9f871cf4b0d9416dbd4ed3c46f4c81dd.pdf\" data-type=\"additional-fact\" target=\"_blank\">приобрела</a>","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/fcf167d73f7d48cc91f368465848633f.csv\" data-type=\"additional-fact\" target=\"_blank\">планируют</a>","type":"p","className":""},{"data":"видео","type":"p","className":""},{"data":"<a href=\"https://static.istories.media/uploaded/documents/a19cd9749e4740eb9d5e10277de64ca0.png\" data-type=\"additional-fact\" target=\"_blank\">невзоров</a>","type":"p","className":""}],"created_at_date":"2021-07-27","updated_at_date":null,"created_at_date_time":null,"updated_at_date_time":null,"is_exclusive":false,"is_urgent":false,"initially_published_at":"2021-07-27T05:59:48.038Z","has_additional_facts":true,"locale":"ru","has_visualization_without_fallback":false,"spec_project":null,"header_secondary":"","warning":"","is_translated_by_ai":false,"with_donation_banner":true,"donation_banner_header":"","donation_banner_text":"","media_outlet__codename":null,"with_authors_request_banner":false,"faq":[],"_path":"/workshops/2021/07/27/pishem-svoego-robota-na-python-urok-12/","is_published":true,"authors_list":[{"id":2517,"last_name":"","first_name":"Редакция","last_name_en":"","first_name_en":"Editors","ordering":null}],"external_authors_list":[],"editors_list":[],"external_editors_list":[],"participants_list":[],"external_participants_list":[],"partners_list":[],"case":null,"translated_material":null,"audio_material":null,"text_material":null,"id":295,"topics":[],"meta":{"og_title":"","og_description":"","twitter_title":"","twitter_description":"","og_image":"https://static.istories.media/uploaded/images/share/f5945842883640f0a327d4474b0dd40e.png","twitter_image":"https://static.istories.media/uploaded/images/share/f5945842883640f0a327d4474b0dd40e.png","vk_image":"https://static.istories.media/uploaded/images/share/vk/a4a3324e25cd46229a890bfbb41e243a.png"},"tags":[],"playlist":null,"socialMediaBanners":[{"id":10,"text":"У пропаганды есть миллиарды из бюджета. У нас — только вы","link":"","codename":"donation"},{"id":14,"text":"Список погибших и пропавших без вести российских военных","link":"","codename":"haron"},{"id":18,"text":"","link":"","codename":"mobile_app"},{"id":6,"text":"Оставайтесь на связи: подпишитесь на нашу рассылку","link":"","codename":"newsletter"}]}},"staticQueryHashes":["764694655"],"slicesMap":{}}