Проверка AJAX на стороне сервера Django - PullRequest
0 голосов
/ 08 марта 2010

В последнее время я пытаюсь реализовать простое приложение Django, которое включает одну проверку AJAX на стороне сервера, это простое поле ввода формы (имя пользователя). Я использовал предустановленную библиотеку проверки AJAX, которая использует jQuery. Таким образом, код выглядит так

Фрагмент HTML

<form id="simpleform" method="post" action="/done/">

Username:<input value="" class="validate[required,custom[noSpecialCaracters],length[0,20],ajax[ajaxUser]]" type="text" name="user" id="user" />

<input class="submit" type="submit" value="Validate"/>
</form>

Фрагмент кода на стороне сервера (встроен в скрипт php)

/* RECEIVE VALUE */
$validateValue=$_POST['validateValue'];
$validateId=$_POST['validateId'];
$validateError=$_POST['validateError'];

    /* RETURN VALUE */
    $arrayToJs = array();
    $arrayToJs[0] = $validateId;
    $arrayToJs[1] = $validateError;

if($validateValue =="testname"){        // validate??
    $arrayToJs[2] = "true";         // RETURN TRUE
    echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}';          // RETURN ARRAY WITH success
}else{
    for($x=0;$x<1000000;$x++){
        if($x == 990000){
            $arrayToJs[2] = "false";
            echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}';      // RETURN ARRAY WITH ERROR
        }
    }

}

Итак, мой вопрос в том, как мне передать это в код Python (для использования в среде Django), как я могу получить имя пользователя из поля ввода в бэкэнд, я думаю, что фрагмент сценария на стороне сервера уже делает это, но я хочу знать, как использовать это в моем коде Pyhon, и я впервые использую jQuery, и мне действительно нужно использовать ту же самую библиотеку валидации. Нужна ваша ценная корпорация.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 12 апреля 2013

Прежде всего, ваш HTML-фрагмент не очень хорош. Просто вы не можете присвоить class значение validate[required,custom[noSpecialCaracters],length[0,20],ajax[ajaxUser]], потому что это нарушает стандарты w3c.

Во-вторых, вы не можете просто использовать одну и ту же систему проверки, потому что здесь Django и Python, и это означает, что система совершенно другая, процесс проверки намного лучше, чем у предоставленного вами чистого php. Так что я предлагаю вам подумать о другом способе делать то, что вы хотите, особенно длинное значение, которое вы присваиваете в class (!), Который, кажется, не является допустимым классом css. Я предлагаю вам использовать hidden поля вместо.

Хотя вот для вас отправная точка:

Шаблон HTML, index.html

{% if form.errors %}
    <div class="alert alert-error">
        {{ form.errors }}
    </div>
{% endif %}
<form id="simpleform" method="post" action="/done/">
    <label for="{{ form.username.name }}">{{ form.username.label }}</label>
    {{ form.username }}
    {% csrf_token %}
    <button id="submit" class="submit" type="submit">Validate</button>
</form>

forms.py . Просто создайте этот файл в папке вашего приложения

from django import forms
class SimpleForm(forms.Form):
    username = forms.CharField(label="Username:", max_length=30, widget=forms.TextInput(attrs={'id':'username', 'class':'css-class-name', 'data-validation':'validate[required,custom[noSpecialCaracters],length[0,20],ajax[ajaxUser]]'}))

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.utils import simplejson
from django.views.decorators.csrf import csrf_exempt
from .forms import SimpleForm

@csrf_exempt
def validate(request):
    if request.is_ajax():
        form = SimpleForm(request.POST)
        if form.is_valid():
            #Do something when the form is valid...

            response_data = { 'username':form.cleaned_data['username'] }
            return HttpResponse(simplejson.dumps(response_data), mimetype="application/json")
    else:
        form = SimpleForm()

    template = {
        'form':form
        }

    return render(request, 'index.html', template)

Ваш urls.py должен выглядеть следующим образом. имя папки, в которой находится views.py .

from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('',
    url(r'^done/$', 'appname.views.validate', name='validate'),
)

В вашем коде JQuery вы должны обработать атрибут data-validation с помощью метода data JQuery.

Для обработки AJAX проверьте метод .ajax в JQuery. Вот краткий пример:

$.ajax({
    type: 'POST',
    url: '/done/',
    data: {username: get_username_here},
    dataType: 'json',
    beforeSend: function(jqXHR, settings) {
        //Do something before send...
    },
    success: function(data, textStatus, jqXHR) {
        alert('Ajax success: ' + data.username);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert(textStatus + '. ' + errorThrown);
    }
});
0 голосов
/ 08 марта 2010

Вы делаете так же, как вы, django views получает параметр запроса Параметр запроса имеет POST «словарь».

def validate(request):
    print request.POST["validateValue"]
    ...
0 голосов
/ 15 апреля 2010

Это немного оффтоп, но по моему опыту лучше всего выполнять проверку AJAX на стороне сервера точно так же, как обычную проверку формы при отправке - это дает точно такие же сообщения об ошибках, если таковые имеются, используя точно такой же код проверки - и, следовательно, обеспечивает согласованное Hijax-совместимое взаимодействие с пользователем.

0 голосов
/ 08 марта 2010

посмотрите на документы

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