Урок 5 / 22 · Commentail 1.3.2
YOUR_API_KEY в уроках — место для вашего значения, а не готовый ключ. Получите значение в кабинете выбранного сервиса и замените только его. Имя RESEND_API_KEY слева оставьте: по нему Python найдёт настройку.
Три разных значения
| Значение | Для чего нужно | Можно показывать читателю? |
|---|---|---|
RESEND_API_KEY
|
Разрешает серверу отправлять письма через Resend | Нет, это секрет |
CAPTCHA_SITE_KEY
|
Показывает нужный виджет CAPTCHA | Да, этот ключ попадёт в HTML |
CAPTCHA_SECRET_KEY
|
Позволяет серверу проверять ответ CAPTCHA | Нет, это секрет |
Публичный и секретный ключ должны относиться к одной CAPTCHA нужного типа. Ключ почты нельзя использовать вместо ключа CAPTCHA.
Зададим значения в терминале
Для локального терминала macOS/Linux:
export RESEND_API_KEY='YOUR_API_KEY'
export DEFAULT_FROM_EMAIL='Comments <comments@YOUR_VERIFIED_DOMAIN>'
export CAPTCHA_SITE_KEY='YOUR_SITE_KEY'
export CAPTCHA_SECRET_KEY='YOUR_SECRET_KEY'
Для PowerShell:
$env:RESEND_API_KEY = 'YOUR_API_KEY'
$env:DEFAULT_FROM_EMAIL = 'Comments <comments@YOUR_VERIFIED_DOMAIN>'
$env:CAPTCHA_SITE_KEY = 'YOUR_SITE_KEY'
$env:CAPTCHA_SECRET_KEY = 'YOUR_SECRET_KEY'
Угловые скобки в адресе сохраняются: это форма Имя <адрес>. YOUR_VERIFIED_DOMAIN замените доменом, который вы подтвердили у почтового провайдера. Пока выбираете только CAPTCHA, почтовые переменные из примера можно не задавать.
Как Django получает значения
В settings.py используем import os и os.environ["RESEND_API_KEY"]. Квадратные скобки намеренно вызывают ошибку, если обязательного значения нет. KeyError с именем переменной означает, что процесс её не получил. Не исправляйте это подстановкой рабочего ключа прямо в Python-файл.
Проверьте только наличие значения, не печатая секрет:
python -c "import os; print('RESEND_API_KEY:', bool(os.environ.get('RESEND_API_KEY')))"
True означает, что строка непустая; это ещё не проверка правильности ключа. YOUR_API_KEY тоже непустая строка, поэтому тестовая отправка всё равно нужна.
Передадим значения рабочему сайту
Переменные из терминала доступны запущенным из него процессам, но не другой уже открытой вкладке, cron, контейнеру или systemd-службе. На сервере внесите их в раздел Environment/Secrets своей панели либо в защищённый файл окружения существующей службы. Затем перезапустите и сайт, и обработчик. Используйте те же базу и settings-модуль.
Django сам не читает .env. Если ваш проект уже использует загрузчик .env, следуйте его формату; иначе для первых уроков используйте команды выше. Не добавляйте второй загрузчик только ради этих примеров. Файл с секретами храните вне публичной папки и Git, с доступом только владельца/службы. При утечке отзовите ключ в кабинете и выдайте новый; удаление строки из статьи или Git не отзывает доступ.
После эксперимента удалите тестовую CAPTCHA и отзовите выделенный тестовый API-ключ. Перед удалением убедитесь, что рабочий сайт использует другой ресурс.
Другие уроки по этой задаче
- 6. Отправляем письма через SMTP
- 7. Почтовый API Resend через Django Anymail
- 9. Подключаем Google reCAPTCHA
- 10. Подключаем Яндекс SmartCaptcha
Выберите способ входа или оставьте комментарий как гость ниже.