我卡在某个地方。我需要一点帮助。
我开始学习django。我为用户登录和注册创建reCaptcha装饰器。它的工作非常好。但是我不能在联系页面上使用相同的reCaptcha装饰器吗?当按下“发送邮件”按钮而不单击reCaptcha按钮时,邮件仍然不见了,并继续显示成功页面。...我该如何解决?
我在这个(sendmail)查看页面上使用装饰器;
view.py
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .forms import ContactForm
from blog.recaptcha import check_recaptcha
@check_recaptcha
def emailView(request, check_recaptcha):
if request.method == 'GET':
form = ContactForm()
else:
form = ContactForm(request.POST)
if form.is_valid():
subject = form.cleaned_data['subject']
from_email = form.cleaned_data['from_email']
message = form.cleaned_data['message']
try:
send_mail(subject, message, from_email, ['hi@mydomain.net'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
return redirect('sendemail:success')
return render(request, "email.html", {'form': form})
def successView(request):
return HttpResponse('Success! Thank you for your message.')
recaptcha.py(装饰器)
from functools import wraps
from django.conf import settings
from django.contrib import messages
import requests
def check_recaptcha(view_func):
@wraps(view_func)
def _wrapped_view(request, *args, **kwargs):
request.recaptcha_is_valid = None
if request.method == 'POST':
recaptcha_response = request.POST.get('g-recaptcha-response')
data = {
'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
'response': recaptcha_response
}
r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
result = r.json()
if result['success']:
request.recaptcha_is_valid = True
else:
request.recaptcha_is_valid = False
messages.error(request, 'Invalid reCAPTCHA. Please try again.')
return view_func(request, *args, **kwargs)
return _wrapped_view
email.html
{% extends "layout.html" %}
{% load crispy_forms_tags %}
{% block body %}
<!-- templates/email.html -->
<h4>Contact Form</h4>
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<div class="g-recaptcha" data-sitekey="6LfkcHg12554353qbkgi-ebcVMhS6e0-XcB0ce"></div>
<br>
<button type="submit" class="btn btn-danger">Send</button>
</form>
{% endblock %}
非常感谢您!