如何使 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>
我是 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>