Интеграция Jquery и Django - PullRequest
       2

Интеграция Jquery и Django

1 голос
/ 20 марта 2012

Как можно интегрировать диалог Jquery-ui с функцией django?

Я имею в виду ... У меня есть форма, закодированная в диалоге jquery-ui.Я хотел бы, чтобы jquery вызывал функцию django при отправке этой формы, но без передачи каких-либо переменных в URL.Возможно ли это?

Кто-нибудь может дать мне подсказку?

Спасибо

[ОБНОВЛЕНО] Я только что понял, что код правильный, но Django возвращает erro 403,наверное потому что защита CSRF.Как я могу это исправить, не отключив эту защиту?Вот мой код jquery-ui:

$( "#dialog-form" ).dialog({
        autoOpen: false,
        height: 430,
        width: 350,
        modal: true,
        draggable: false,
        resizable: false,
        buttons: {
            "Confirm": function() {
                var bValid = true;
                allFields.removeClass( "ui-state-error" );

                bValid = bValid && checkLength( name2, "name2", 6, 80 );
                bValid = bValid && checkLength( email, "email", 6, 80 );


                bValid = bValid && checkRegexp( email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "some-error-msg..." );

                if ( bValid ) {
                    $( "#users tbody" ).append( "<tr>" +
                        "<td>" + name.val() + "</td>" + 
                        "<td>" + email.val() + "</td>" + 
                        "<td>" + name2.val() + "</td>" +
                    "</tr>" ); 


                    $.post("", {'csrfmiddlewaretoken':'{csrf_token}}'}, function(data) {

                        alert(data);// ---> data is what you return from the server
                    }, 'json');

                    $( this ).dialog( "close" );
                }
            },
            "Cancel": function() {
                $( this ).dialog( "close" );
            }
        },

        close: function() {
            allFields.val( "" ).removeClass( "ui-state-error" );
        }
    });

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Вам нужно использовать метод POST HTTP вместо GET. POST не будет добавлять параметры в URL, будет публиковать параметры в кодировке base64, и они не будут видны в URL.

Просто сериализовать любой объект Django в формате json пример и вернуть json через view.

Пример полного стека (извините за неприятные цвета на сайте).

0 голосов
/ 20 марта 2012

Вам нужно 2 штуки, чтобы сделать эту работу.

  • В конце django напишите свою функцию, которую вы хотите вызывать при отправке формы. Хорошее место для его хранения - views.py. Теперь добавьте запись в urls.py, чтобы django знал, что вызывать эту функцию при каждом обращении к этому URL.
  • На стороне клиента перехватите событие cubmit формы и сделайте ajax-вызов к URL, который вы добавили в urls.py выше.

Это очень простая схема того, что вам нужно сделать. Если вы застряли в каком-то месте, попробуйте учебник django для получения справки по первой части и документацию jquery ajax для справки по второй части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...