Как проверить django-recaptcha с помощью формы ajax в django
У меня есть небольшая контактная форма, которая отправляется через ajax. Я добавил рекапчу, используя модуль django-recaptcha.
Когда форма проверена, она выглядит как captcha
поле отсутствует, поскольку сообщение об ошибке добавляется в поле captcha в форме response-html. Как я могу проверить поле captcha вручную? Или JS в message.html
отправка неправильного поля / данных?
forms.py
from django import forms
from captcha.fields import ReCaptchaField
from captcha.widgets import ReCaptchaV2Checkbox
from .models import Message
class MessageForm(forms.ModelForm):
"""docstring for MessageForm."""
captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox)
class Meta:
model = Message
fields = ['name', 'from_email', 'message', 'captcha']
views.py
from django.shortcuts import render, redirect
from .forms import MessageForm
def messageView(request):
if request.method == 'POST' and request.is_ajax:
form = MessageForm(request.POST)
if form.is_valid():
message = form.save()
form = MessageForm()
else:
print('form not valid')
return render(request, 'contact/message.html',
{'form': form})
else:
form = MessageForm()
return render(request, 'contact/message.html',
{'form': form})
message.html
{% load crispy_forms_tags %}
<div class="form-container">
<form class="message-form" method="post" action="">
{% csrf_token %}
{{ form|crispy }}
<div class="form-actions">
<button type="submit" name="button" class="btn btn-primary">Send</button>
</div>
</form>
</div>
<script>
$(document).ready(function() {
$('.message-form').on('submit', function(event) {
event.preventDefault();
return create_message();
});
function create_message() {
$.ajax({
url: 'contact/message/',
type: 'POST',
data: {name: $('#id_name').val(),
from_email: $('#id_from_email').val(),
message: $('#id_message').val(),
captcha: $('#g-recaptcha-response').val(),
csrfmiddlewaretoken: '{{csrf_token}}'
},
success: function(json) {
$('.form-container').html(json)
}
})
};
});
</script>
1 ответ
Попробуйте изменить строку
captcha: $('#g-recaptcha-response').val(),
за
g-recaptcha-response: $('#g-recaptcha-response').val(),