Я добавил sendgrid в свое приложение django Следуйте простым шагам отсюда https://github.com/elbuo8/sendgrid-django

Создать учетную запись и и скопировал API на сайте sendgrid

Добавлен код на мой взгляд

 sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
            from_email = Email("commerce@gmail.com")
            to_email = Email("lopa@gmail.com")
            subject = "Sending with SendGrid is Fun"
            content = Content("text/plain", "and easy to do anywhere, even with Python")
            mail = Mail(from_email, subject, to_email, content)
            response = sg.client.mail.send.post(request_body=mail.get())
            messages.add_message(request, messages.SUCCESS, str(payment.id) + response.status_code + response.body + response.headers) 

И получаю ошибку

Ошибка HTTP 401: неавторизован

В чем может быть проблема?

> Traceback  Traceback: File
> "C:\Users\PAPA\DEV\rent_unit\rent_unit_venv\lib\site-packages\django\core\handlers\base.py"
> in get_response
>   132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs) File "C:\Users\PAPA\DEV\rent_unit\rent_unit_venv\lib\site-packages\django\contrib\auth\decorators.py"
> in _wrapped_view
>   22.                 return view_func(request, *args, **kwargs) File "C:\Users\PAPA\DEV\rent_unit\src\payment\views.py" in payment_new
>   251.             response = sg.client.mail.send.post(request_body=mail.get()) File
> "C:\Users\PAPA\DEV\rent_unit\rent_unit_venv\lib\site-packages\python_http_client\client.py"
> in http_request
>   204.                 return Response(self._make_request(opener, request)) File
> "C:\Users\PAPA\DEV\rent_unit\rent_unit_venv\lib\site-packages\python_http_client\client.py"
> in _make_request
>   138.         return opener.open(request) File "c:\python27\Lib\urllib2.py" in open
>   435.             response = meth(req, response) File "c:\python27\Lib\urllib2.py" in http_response
>   548.                 'http', request, response, code, msg, hdrs) File "c:\python27\Lib\urllib2.py" in error
>   473.             return self._call_chain(*args) File "c:\python27\Lib\urllib2.py" in _call_chain
>   407.             result = func(*args) File "c:\python27\Lib\urllib2.py" in http_error_default
>   556.         raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
> 
> Exception Type: HTTPError at
> /payment/new/28/http://127.0.0.1:8000/lease/payment_details/28/
> Exception Value: HTTP Error 401: Unauthorized
2
Ilya Bibik 29 Май 2017 в 03:58

2 ответа

Лучший ответ

Проблема именно в том, что она говорит; Вы не авторизованы. Скорее всего, ваш ключ API не установлен.

Инструкции, которые вы добавили в свой вопрос, показывают, что SENDGRID_API_KEY добавляется в Django settings.py, а код показывает, что вы извлекаете данные из переменной окружения.

Подход переменной среды

Если вы используете подход с использованием переменных среды, убедитесь, что вы установили переменную среды с именем SENDGRID_API_KEY. Вы можете проверить это, открыв консоль python и набрав:

import os
os.environ.get('SENDGRID_API_KEY')

Если ключ не распечатан, значит, он отсутствует. У каждой ОС есть свой способ установки переменных среды навсегда, поэтому я не буду перечислять их всех здесь.

Settings.py Подход

Если вы собираетесь использовать подход Django settings.py, просто замените:

sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))

С участием

from django.conf import settings

sg = sendgrid.SendGridAPIClient(apikey=settings.SENDGRID_API_KEY)

Переменная среды в подходе Settings.py

Наконец, поскольку settings.py является исполняемым файлом Python, вы также можете выполнить импорт переменной окружения. Это имеет преимущество в том, что его можно настраивать с системного уровня или с консоли Heroku, но все еще использует settings.py.

# inside settings.py
import os    
SENDGRID_API_KEY = os.environ.get('SENDGRID_API_KEY')
2
Soviut 29 Май 2017 в 01:12

Просто обновите ваш код, чтобы использовать тот, который вы хотите, если вы предпочитаете не использовать переменную окружения или настройки

SENDGRID_API_KEY = ' * sendgrid *** api * '

Sg = sendgrid.SendGridAPIClient (apikey = SENDGRID_API_KEY)

0
Ali Raja 16 Июл 2019 в 10:47