我正在尝试使用此存储库在我的 django-crispy-Forms 表单中实现 recaptcha,但是每当我将其放入表单布局时,它都不会显示。我错过了什么吗?
class ServerBumpFormView(LoginRequiredMixin, UpdateView):
model = Server
template_name = "servers/server_bump_form.html"
success_url = reverse_lazy("servers:manage")
fields = ()
def get_queryset(self):
if not self.request.user.is_superuser:
return self.model.objects.filter(owner=self.request.user)
return self.model.objects.all()
def get_form(self, form_class=None):
form = super().get_form(form_class)
form.helper = FormHelper()
captcha = ReCaptchaField(widget=ReCaptchaWidget())
form.helper.layout = Layout(
'captcha',
)
form.helper.add_input(Submit('submit', 'Bump', css_class='btn-blurple'))
if form.is_valid():
obj = form.save(commit=False)
obj.bumpPoints = obj.bumpPoints + 1
obj.last_bumped_at = datetime.datetime.now().replace(microsecond=0, tzinfo=pytz.UTC)
obj.save()
return form
它还会产生一个键错误
KeyError: "Key 'captcha' not found in 'ServerForm'. Choices are: ."
我也面临着同样的问题,并且能够使用 HTML 布局解决它。
您可以使用 HTML 布局元素添加 ReCapcha html 代码。
form.helper.layout = Layout(
HTML('<div class="form-group"><div class="g-recaptcha" data-sitekey="%s"></div></div>' %RECAPTCHA_PUBLIC_KEY),
)
不要忘记从设置中导入HTML和验证码代码变量或手动添加。