Невозможно сделать POST-запрос от Django View - PullRequest
0 голосов
/ 31 марта 2019

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, но не работает изнутри представления? И как мне это исправить?

...