如何使 Django 验证器动态化?

How to make Django validators dynamic?

我是 Django 的新手。我正在接手一个别人开发的Django项目。他们从这里获取了基本的表单验证器:

https://docs.djangoproject.com/en/2.0/topics/auth/passwords/

所以如果我打开

settings/common.py

我明白了:

AUTH_PASSWORD_VALIDATORS = [
{
    'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    'OPTIONS': {
        'min_length': 9,
    }
},
{
    'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]

我的项目经理告诉我,她希望这些验证程序在一个人打字时发生,而不是在提交表单时发生。所以我需要以某种方式让这些验证器在光标离开每个字段时触发 onBlur。

这在 Django 中是如何完成的?

这不是正确的方法。 Django 是后端框架。这意味着它作为 http 服务器工作:您发送请求并获得响应。

您可能想要的是在每个 js 事件中触发请求。这意味着您需要将 ajax 事件发送到某个验证端点(您需要编写返回 True 或 False 的 Django 方法)并为每个 js 事件调用它。我宁愿向您推荐另一种方法:

编写将为每个 js 事件调用的 js 验证器。这不会以 DDoS 结束,它会更快更轻。

var validate = function(text) {
  return text.length > 8; // or ajax sending text to validate
}

$('input.pass').on('input', function() {
  if (!validate($(this).val())) {
    $(this).addClass('error');
    $('p.error-msg').show();
  }
  else {
   $(this).removeClass('error');
    $('p.error-msg').hide();
  }
})
input.pass.error {
  border: 1px solid #FF0000;
}

p.error-msg {
  color: #FF0000;
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="password" class="pass" />
<p class="error-msg">
Too short password.
</p>