Как передать JSONResponse обратно в шаблон Django
У меня есть пользовательская функция представления, которая будет автоматически выполняться, когда пользователь нарушит мою политику входа (это делается через django-axes). Я не могу отобразить данные JSONResponse в шаблоне Django. Могу ли я узнать, есть ли какой-нибудь обходной путь для этого?
HTML
<form role="agent-login" class="login" id="agentloginform" action="{% url 'agent-login' %}" method="post"> {% csrf_token %} <div class="form-group">
<input type="text" placeholder="Email address" name="email" class="form-control">
</div>
<div class="form-group togglepassword-right">
<input type="password" placeholder="Password" name="password" class="form-control">
<i class="glyphicon glyphicon-eye-open form-control-feedback" id="togglePassword"></i>
</div>
<p class="text-danger text-center" id="lockout-error" style="display:none;"> {{ errors.password }} {{ login }}</p>
<div class="form-group">
<button data-request="ajax-submit" data-target="[role='agent-login']" class="btn-1 " type="button" id="agent-submit"> Login now </button>
</div>
</form>
пользовательский вид
def user_lockout(request, credentials):
"""
Custom accout lockout message for django-axes.
change custom_account_lockout_message accordingly to what you need.
"""
response_data = {
"login": "Failed",
"error": settings.CUSTOM_AXES_SOFT_LOCKOUT_MESSAGE,
}
return HttpResponse(JsonResponse(response_data))
Я думал использовать ajax для получения данных JSONResponse. Но поскольку это пользовательская кнопка, которая была сделана другими, я не смогу изменить ее.
Вот что я придумал
$('#agent-submit').click(function(e) {
console.log('pressed');
console.log($(this).serialize())
console.log(e)
$.ajax({
type: 'POST',
dataType: 'json',
url: '{% url '
agent - login ' %}',
data: $(this).serialize(),
success: function(response) {
var dd = jQuery.parseJSON(response)
console.log(dd)
console.log('finally working');
$('#lockout-error').text(dd.error), $('#lockout-error').css("display", "block")
},
error: function(response) {
console.log('error');
console.log(response);
}
});
});