#python #django #python-requests
#python #django #python-запросы
Вопрос:
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, но не выполняется изнутри представления? И как мне это исправить?
Комментарии:
1. На самом деле вы не предоставили здесь достаточно информации. Где остальная часть этого представления? Что такое
the_url
? Указывает ли он на внешний сайт или обратно на тот же сайт Django?2. @DanielRoseman URL указывает на внешний сайт; это конечная точка REST из API, который мы используем в других проектах много раз в день. Добавление функции из представления.