Проверка Jquery - проверка доступности электронной почты и имени пользователя на сервере Django - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь проверить регистрационную форму для доступности электронной почты и имени пользователя на стороне сервера, запрограммированной Django. Я проверил эту jQuery Validation Plugin для удаленной проверки пароля с помощью Django , но я получаю 403 запрещенных - проверка CSRF не удалась. Я попытался включить токен csrf в скрипт jquery. Но все еще не работает. Я показал код ниже для проверки доступности электронной почты.

views.py:

def email_check(request):
    response_str="false"
    if request.is_ajax():
        e = request.POST.get("email_address")
        try:
            obj = User.objects.get(email=e)
        except DoesNotExist:
            response_str="true"
    return HttpResponse(response_str)

urls.py:

url(r'^signup/email/check/$', 'registration.views.email_check')

signup.html: https://gist.github.com/2253002

Может ли кто-нибудь помочь мне в этом?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Вы должны отправить токен csrf в файле cookie с именем «X-CSRFToken», есть способ глобально включить это поведение с помощью jQuery, например:

https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/#ajax

0 голосов
/ 01 апреля 2012
$('html').ajaxSend(function(event, xhr, settings) {
    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'));
    }
});

Используйте приведенный выше код jquery в своем шаблоне, чтобы убедиться, что ваши вызовы AJAX POST всегда включают токен csrf.Подробности см. В этой статье из официального документа.

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