TL; DR : у меня есть запрос POST (из модуля «Запросы»), который работает вне представления Django, но вызывает исключение типа «OpenSSL.SSL.Error» внутри представления. Может кто-нибудь подскажите пожалуйста как это исправить?
Проблема:
Я использую Django 1.7.11, запросы 2.14.2 и Python 2.7.14 для размещения веб-приложения в Linux на AWS.
Структура каталогов веб-приложения настроена следующим образом:
myproject
|___myapp
| |
| |___templates
| | |
| | |___mytemplate.html
| |
| |___views.py
| |___urls.py
|
|___post_request.py
У меня есть функция в views.py, которая вызывается непосредственно по ссылке в шаблоне Django, mytemplate.html. Ссылка в шаблоне не является частью формы и указывается так:
<li><a href="{% url 'myapp:myview' %}">The Link to My View</a></li>
Соответствующая запись в myapp / urls.py:
url(r"^myview/$", the_view_function, name="myview")
Моя функция в myapp / views.py выглядит следующим образом:
def the_view_function(request):
if request.user.is_authenticated():
context = {}
data = {}
headers = {}
headers['Authorization'] = 'Token aaaaabbbbbcccc'
the_url = "https://www.example.com/rest/endpoint/"
logger.info("view function called")
if 'variable_1' in request.session:
variable_1 = request.session['variable_1']
logger.info("Variable 1 is set")
else:
variable_1 = 0
logger.info("Variable 1 is zero")
if 'variable_2' in request.session:
variable_2 = request.session['variable_2']
else:
variable_2 = -1
if variable_1 == 0:
logger.info("First time")
data['first_name'] = 'firstname'
data['last_name'] = 'lastname'
data['email'] = 'user@not.valid.email.com'
data['role'] = "User"
the_response = requests.post(the_url, headers=headers, data=data, verify=False)
Сбой следующей строки:
the_response = requests.post(the_url, headers=headers, data=data, verify=False)
Когда я нажимаю «Ссылка на мой вид» на странице в моем веб-браузере, запрос вызывает исключение типа «OpenSSL.SSL.Error».
Однако:
У меня есть следующий код в файле post_request.py:
import requests
the_url = "https://www.example.com/rest/endpoint/"
headers = {'Authorization': 'Token aaaaabbbbbcccc'}
post_data = dict()
post_data['first_name'] = 'firstname'
post_data['last_name'] = 'lastname'
post_data['email'] = 'user@not.valid.email.com'
post_data['role'] = "User"
the_response = requests.post(the_url, headers=headers, data=post_data, verify=False)
print(the_response.status_code)
Когда я запускаю этот код из каталога myproject, используя:
python post_request.py
Я получаю ответ 201, и это то, что я должен получить из представления.
Может кто-нибудь объяснить, почему запрос POST работает, когда он не выполняется как часть представления Django, но не работает изнутри представления? И как мне это исправить?