Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Как правильно отправлять запрос из вне в django? [RSS Feed]

#1 Дек. 15, 2015 12:20:00

nxexox
Зарегистрирован: 2015-12-15
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

Добрый вечер! Подскажите пожалуйста. Всю голову сломал, весь гугл перерыл. Все что смог найти это что надо ДОБАВИТЬ CROS и в запрос и в ответ.
Суть в следующем. Есть сайт, на домене на хосте где то. Есть сайт на другом домене на сервере.
На сервере крутится сервис на джанго.
И вот мне с сайта, что на хосте, надо ajax запрос отправить на к django на сервере, и принять ответ.
Помогите, как это сделать? Кодом желательно, самый простейший вариант

https://toster.ru/q/274422 мой топик. Ничего не понятно

Офлайн

#2 Дек. 15, 2015 12:34:56

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

А что именно непонятно, в чем трудности?
1) На джанге добавляем CORS к заголовкам для тех ответов, которые хотим отдавать по ajax с другого домена.
2) Делаем ajax запрос с другого домена к джанге.



Отредактировано plusplus (Дек. 15, 2015 12:35:34)

Офлайн

#3 Дек. 15, 2015 13:04:39

nxexox
Зарегистрирован: 2015-12-15
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

Сложность как раз в добавлении этого заголовка. Поясняю.
Вот js который валяется на example.ru

$.ajax({
            url: "http://example3.ru",
            type: 'POST',
            data: {
                mass: mass,
                sost: sost,
                d: d,
            },
            dataType:"json",
                // При успехе меняем информацию в шаблоне
                success: function(data){
                    //window.location.href = "{{url}}/crm/todos/";
                    //rePrintTable(data.dela);
                },
            error: function(data) {
                    //window.location.href = "{{url}}/crm/todos/";
                    //rePrintTable(data.dela);
            },
    // CSRF механизм защиты Django
                beforeSend: function(xhr, settings) {
                    console.log('-------------before send--');
                    function getCookie(name) {
                        var cookieValue = null;
                        if (document.cookie && document.cookie != '') {
                            var cookies = document.cookie.split(';');
                            for (var i = 0; i < cookies.length; i++) {
                                var cookie = jQuery.trim(cookies[i]);
                                // Does this cookie string begin with the name we want?
                            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                                break;
                            }
                        }
                    }
                    return cookieValue;
                    }
                    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
                        // Only send the token to relative URLs i.e. locally.
                        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
                    }
                }
            });// ajax

А вот вьюха которая обрабатывает:
@csrf_exempt
def ei(request):
    if request.method == "POST" and request.is_ajax():
        print request.POST
    return HttpResponse("ok")

И вот данный код не работает.
Мне и csrf говорили ковырять, я пробовал прикрутить. Но мне кажется он не нужен, если я его во вьюхе отключаю.

Офлайн

#4 Дек. 15, 2015 13:29:19

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

@csrf_exempt
def ei(request):
    response = HttpResponse("ok")
    response['Access-Control-Allow-Origin'] = "*"
    if request.method == "POST" and request.is_ajax():
        print request.POST
    return response

Попробуй так



Офлайн

#5 Дек. 15, 2015 13:44:24

nxexox
Зарегистрирован: 2015-12-15
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

Неа((
Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://firelead.ru:7755/widgets/ie/. (Причина: отсутствует заголовок CORS ‘Access-Control-Allow-Origin’).

Офлайн

#6 Дек. 15, 2015 13:56:58

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

nxexox
Неа((Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://firelead.ru:7755/widgets/ie/. (Причина: отсутствует заголовок CORS ‘Access-Control-Allow-Origin’).
Эта ссылка выдает 404-ю ошибку вместо “ok”.



Офлайн

#7 Дек. 15, 2015 14:01:44

nxexox
Зарегистрирован: 2015-12-15
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно отправлять запрос из вне в django?

Спасибо! Заработало. Ваш способ с добавлением заголовка, + я две буквы напутал в url. Все заработало.
Может глянете эту тему??
http://python.su/forum/topic/28834/

Офлайн

  • Начало
  • » Django
  • » Как правильно отправлять запрос из вне в django?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version