Javascript 使用Django进行Jquery表单验证
在我的django应用程序中,我有一个表单,要求用户输入电子邮件地址和用户名 我想能够检查是否用户名或电子邮件地址已经存在,并提出一个错误,他们这样做。但我希望在不重新加载页面的情况下执行此操作,因此使用javascript或Jquery 我的第一个想法是这样(用户名): html: 然后在我的模板中:Javascript 使用Django进行Jquery表单验证,javascript,jquery,django,Javascript,Jquery,Django,在我的django应用程序中,我有一个表单,要求用户输入电子邮件地址和用户名 我想能够检查是否用户名或电子邮件地址已经存在,并提出一个错误,他们这样做。但我希望在不重新加载页面的情况下执行此操作,因此使用javascript或Jquery 我的第一个想法是这样(用户名): html: 然后在我的模板中: <div class='search'> {% for user in users %} <input type='hidden' value='{{us
<div class='search'>
{% for user in users %}
<input type='hidden' value='{{user.username}}'
{% endfor %}
</div>
{users%%中的用户为%s}
很抱歉,您的方法在安全性和效率方面非常糟糕。您正在公开用户的所有用户名(无论是否隐藏输入)。您应该检查一些已构建的身份验证应用程序,例如
我将使用ajax验证:
首先给您的表单一个id,例如my\u表单
<script>
$('#my_form').submit(function(){
var username = $('#username').val();
if (username == ''){
alert('please enter username');
return false;
}
$.ajax({
type: "POST",
url: "{% url auth_validate %}",
data: {'username': $('#username').val(), 'csrfmiddlewaretoken': '{{csrf_token}}'},
dataType: "text",
success: function(response) {
var response = $.parseJSON( response );
if (response.success){
return true;
}
else{
alert(response.error);
}
},
error: function(rs, e) {
alert(rs.responseText);
}
});
})
</script>
现在在myapp.views
中:
from django.http import HttpResponse
from django.utils import simplejson
from django.utils.translation import ugettext_lazy as _
def auth_validate(request):
error = ''
success = False
if request.method == 'POST':
username = request.POST.get('username', None)
if not username:
error = _('Please enter username')
elif User.objects.filter(username__exact=username).exists():
error = _('Sorry this username is already taken')
else:
success = True
ajax_vars = {'success': success, 'error': error}
return HttpResponse(simplejson.dumps(ajax_vars),
mimetype='application/javascript')
很抱歉,您的方法在安全性和效率方面非常糟糕。您正在公开用户的所有用户名(无论是否隐藏输入)。您应该检查一些已构建的身份验证应用程序,例如
我将使用ajax验证:
首先给您的表单一个id,例如my\u表单
<script>
$('#my_form').submit(function(){
var username = $('#username').val();
if (username == ''){
alert('please enter username');
return false;
}
$.ajax({
type: "POST",
url: "{% url auth_validate %}",
data: {'username': $('#username').val(), 'csrfmiddlewaretoken': '{{csrf_token}}'},
dataType: "text",
success: function(response) {
var response = $.parseJSON( response );
if (response.success){
return true;
}
else{
alert(response.error);
}
},
error: function(rs, e) {
alert(rs.responseText);
}
});
})
</script>
现在在myapp.views
中:
from django.http import HttpResponse
from django.utils import simplejson
from django.utils.translation import ugettext_lazy as _
def auth_validate(request):
error = ''
success = False
if request.method == 'POST':
username = request.POST.get('username', None)
if not username:
error = _('Please enter username')
elif User.objects.filter(username__exact=username).exists():
error = _('Sorry this username is already taken')
else:
success = True
ajax_vars = {'success': success, 'error': error}
return HttpResponse(simplejson.dumps(ajax_vars),
mimetype='application/javascript')
您可以通过jquery对一个视图进行ajax调用,该视图检查用户是否存在以及是否可以获取用户名,并将此结果返回到脚本。您可以通过jquery对一个视图进行ajax调用,该视图检查用户是否存在以及是否可以获取用户名,并将此结果返回到脚本。感谢您的帮助。我得到了第一部分,你使用了post方法。在我看来,我必须检查“用户名”是否已经在使用中。我没有得到的是如何将响应返回到脚本(是否正在使用)?我认为ajax请求的第二部分可以处理这个问题,但我不知道它是如何工作的。你能给我解释一下吗?@Marcolac我已经添加了完整的示例代码。我刚刚尝试验证用户名,但您可以用类似的方式验证更多内容。希望这会有帮助。非常感谢!这对我帮助很大。从昨天开始我就试着让它发挥作用,但遗憾的是我没有做到。当我尝试您的解决方案时,在输入用户名(存在或不存在)并提交表单后,只会出现一个空警报。我不知道错误是从哪里来的。你知道为什么它不起作用吗?非常感谢。我想这里少了点什么。如果用户名存在,则阻止提交表单。但是谢谢你的代码,它帮了我很多。谢谢你的帮助。我得到了第一部分,你使用了post方法。在我看来,我必须检查“用户名”是否已经在使用中。我没有得到的是如何将响应返回到脚本(是否正在使用)?我认为ajax请求的第二部分可以处理这个问题,但我不知道它是如何工作的。你能给我解释一下吗?@Marcolac我已经添加了完整的示例代码。我刚刚尝试验证用户名,但您可以用类似的方式验证更多内容。希望这会有帮助。非常感谢!这对我帮助很大。从昨天开始我就试着让它发挥作用,但遗憾的是我没有做到。当我尝试您的解决方案时,在输入用户名(存在或不存在)并提交表单后,只会出现一个空警报。我不知道错误是从哪里来的。你知道为什么它不起作用吗?非常感谢。我想这里少了点什么。如果用户名存在,则阻止提交表单。但是谢谢你的代码,它帮了我很多。
url(r'^auth_validate/$', 'myapp.views.auth_validate', name='auth_validate'),
from django.http import HttpResponse
from django.utils import simplejson
from django.utils.translation import ugettext_lazy as _
def auth_validate(request):
error = ''
success = False
if request.method == 'POST':
username = request.POST.get('username', None)
if not username:
error = _('Please enter username')
elif User.objects.filter(username__exact=username).exists():
error = _('Sorry this username is already taken')
else:
success = True
ajax_vars = {'success': success, 'error': error}
return HttpResponse(simplejson.dumps(ajax_vars),
mimetype='application/javascript')