我正在使用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')
答案 0 :(得分:0)
请勿拨打addError
,removeError
,并从您的asynchValidator返回true
或false
。