最近我正在尝试实现一个包含一个服务器端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,我确实需要使用这个相同的验证库。你需要有价值的公司。
感谢。
答案 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)
答案 2 :(得分:0)
你就像你一样,django views收到一个请求参数。 request参数有一个POST“dictionary”。
def validate(request):
print request.POST["validateValue"]
...
答案 3 :(得分:0)
这有点偏离主题,但根据我的经验,最好以与提交时常规表单验证完全相同的方式进行服务器端AJAX验证 - 如果有的话,通过使用完全相同的验证代码提供完全相同的错误消息 - 因此提供一致的Hijax-compliant用户体验。