Джанго контактная форма декораторов Google recaptcha - PullRequest
0 голосов
/ 05 ноября 2018

Я где-то застрял. Мне нужна небольшая помощь.

Я начал изучать джанго. Я создаю 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 %}

Большое спасибо!

...