Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Django进行Jquery表单验证_Javascript_Jquery_Django - Fatal编程技术网

Javascript 使用Django进行Jquery表单验证

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

在我的django应用程序中,我有一个表单,要求用户输入电子邮件地址和用户名

我想能够检查是否用户名或电子邮件地址已经存在,并提出一个错误,他们这样做。但我希望在不重新加载页面的情况下执行此操作,因此使用javascript或Jquery

我的第一个想法是这样(用户名):

html:

然后在我的模板中:

    <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')