我使用django 1.8.5和simple-math-captcha。问题是如何通过ajax获取新的验证码。
comment_form.html:
<div class="form-group">
{{form.captcha}}
<span class="error" id="comment-error-captcha"></span>
</div>
forms.py:
class AddCommentForm(forms.ModelForm):
captcha = MathCaptchaField(widget=MathCaptchaWidget(question_tmpl=u'<label for="id_captcha_0">What is the answer %(num1)i %(operator)s %(num2)i? </label>'))
class Meta:
model = Comment
fields = '__all__'
def __init__(self, *args, **kwargs):
super(AddCommentForm, self).__init__(*args, **kwargs)
self.fields['captcha'].widget.attrs['class'] = 'form-control'
我不知道如何在不重新加载页面的情况下获取新的验证码,请帮帮我。
答案 0 :(得分:0)
显然你需要使用ajax重载,但simple-math-captcha不能提供这个解决方案。您可以覆盖此模块并添加ajax刷新或使用另一个。我在我的项目django-simple captcha中使用它已经带有ajax刷新。 例如:
<form action='.' method='POST'>
{{ form }}
<input type="submit" />
<button class='js-captcha-refresh'></button>
</form>
$('.js-captcha-refresh').click(function(){
$form = $(this).parents('form');
$.getJSON($(this).data('url'), {}, function(json) {
// This should update your captcha image src and captcha hidden input
});
return false;
});
答案 1 :(得分:0)
解决方案:
class GetNewCaptcha(View):
def get(self, request, **kwargs):
r = {}
form = AddCommentForm()
token = self.get_or_create_csrf_token(request)
r['token'] = token
r['captcha'] = str(form['captcha'])
return JsonResponse(r)