Parsley.js远程验证错误

时间:2016-03-15 17:44:53

标签: django django-forms parsley.js

我正在使用Parsley.js(在Django中)构建一个自定义远程验证器,我已经找到了一些东西,但我遇到了一对问题。

forms.py

@parsleyfy
class CustomUserCreationForm(UserCreationForm):
    email = forms.CharField(label='', required=True, widget = forms.TextInput(
        attrs = {
            'placeholder': 'E-mail',
            'class': 'form-control',
            'id': 'email',
            'data-parsley-remote': '',
            'data-parsley-remote-options': '{ "type": "POST", "dataType": "json" }',
            'data-parsley-remote': '/check_email/',
            'parsley-remote-method': 'POST',
            'data-parsley-remote-validator': 'emailCheck',
            'data-parsley-remote-message': 'The E-mail is already used.'
        }
    ))

模板

<form data-parsley-validate data-parsley-remote id="user_form" method="post" action="/register/" enctype="multipart/form-data" data-parsley-trigger="focusout">

    {% csrf_token %}

    {{ user_form.as_p }}

    <input type="submit" class="btn btn-info submit" name="submit" value="Register" />

</form>

脚本

Parsley.addAsyncValidator(
  'emailCheck', function (xhr) {
       var email = $('#email').parsley();
       var response=xhr.responseText;
       var jsonResponse = JSON.parse(response);
       var jsonResponseText = jsonResponse["response"];

       window.ParsleyUI.removeError(email,'errorUsername');
       if(jsonResponseText == 'This E-mail is ok.')
           return 200;
       if(jsonResponseText == '404')
           window.ParsleyUI.addError(email,'errorUsername',jsonResponseText);
  }, '/email_check/'
);

现在,第一个问题是,当我编写现有的电子邮件时,会显示两条消息:来自form标签的消息和来自Django视图的另一封消息(&#34; jsonResponseText&#34; );每当我删除&#34; jsonResponseText&#34;我收到一个错误:&#34; Uncaught TypeError:无法读取属性&#39; name&#39;未定义的&#34;。

第二个问题有点烦人:如果我写一个不存在的电子邮件并填写整个表单,当我点击Register时,没有任何反应。我认为问题是服务器收到GET请求而不是POST,但我不知道它来自哪里。

我还发布 view.py 文件,以获得完整性

def register(request):
    registered = False

    if request.method == 'POST':
        user_form = CustomUserCreationForm(request.POST)

        if user_form.is_valid():
            user = user_form.save()

            registered = True

            return render(request, 'blog/registered.html')

        else:
            print user_form.errors
    else:
        user_form = CustomUserCreationForm()

    return render(request, 'blog/post_list.html', {'user_form': user_form})


@requires_csrf_token
def email_check(request):
    email = request.POST.get('email', False)
    if request.is_ajax():
        if email:
            query_email = CustomUser.objects.filter(email=email)
            if query_email.exists():
                #res = "{0} is already in use.".format(email)
                res = 404
            else:
                res = "This E-mail is ok."
            ajax_vars = {'response': res, 'email': email}
            json_data = json.dumps(ajax_vars)
        else:
            res = "This field is required."
            ajax_vars = {'response': res, 'email': email}
            json_data = json.dumps(ajax_vars)

        return HttpResponse(json_data, content_type='application/json')

1 个答案:

答案 0 :(得分:0)

请勿拨打addErrorremoveError,并从您的asynchValidator返回truefalse