Django服务器端AJAX验证

时间:2010-03-08 16:15:42

标签: ajax django

最近我正在尝试实现一个包含一个服务器端AJAX验证的简单Django应用程序,它是一个简单的表单输入字段(用户名)。我使用了一个使用jQuery的预构建的在线AJAX验证库。所以代码就像这样

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 个答案:

答案 0 :(得分:2)

首先,您的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 即可。只需在app文件夹中创建此文件

即可
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代码中,您应该使用JQuery的data方法处理data-validation属性。

要处理AJAX检查JQuery的.ajax方法。一个简短的例子就是:

$.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);
    }
});

答案 1 :(得分:0)

看看at the docs

答案 2 :(得分:0)

你就像你一样,django views收到一个请求参数。 request参数有一个POST“dictionary”。

def validate(request):
    print request.POST["validateValue"]
    ...

答案 3 :(得分:0)

这有点偏离主题,但根据我的经验,最好以与提交时常规表单验证完全相同的方式进行服务器端AJAX验证 - 如果有的话,通过使用完全相同的验证代码提供完全相同的错误消息 - 因此提供一致的Hijax-compliant用户体验。