- 1. Implementierung
- 1. Dekorateur
- 2. Clientseite
- 2. Ergebnis
Bei der Registrierung von Benutzern und einigen anderen Aktionen anonymer Benutzer wurde reCAPTCHA zur Website hinzugefügt, da sonst zu viele Roboter auf der Website registriert sind.
Das Hinzufügen von reCAPTCHA erfolgte über eine Decorator-Funktion, damit diese Methode für Seitenaufrufe wiederverwendet werden kann.
Um reCAPTCHA auf Ihrer Website zu implementieren, müssen Sie Ihre Website im reCAPTCHA Admin registrieren.
Als Domain habe ich die IP-Adresse der Amtsleitung meines PCs gewählt, auf der ich die Seite entwickle.
Implementierung
Die Implementierung von reCAPTCHA besteht aus zwei Schritten:
- Implementierung von reCAPTCHA auf der Client-Seite, also im HTML-Code
- Implementierung von reCAPTCHA auf der Serverseite
Bei der Registrierung einer Site werden zwei Schlüssel generiert:
- Site-Schlüssel – Der Schlüssel, der auf der HTML-Seite platziert wird
- Geheimer Schlüssel – Der Schlüssel, der verwendet wird, um die Website und den Google reCAPTCHA-Dienst zu kommunizieren
Der Implementierungsprozess wird wie folgt sein. Auf einer HTML-Seite in einem Formular, das eine Validierung von Benutzeraktionen erfordert, platzieren wir das reCAPTCHA-Skript und den Site-Schlüssel.
Auf der Serverseite fügen wir einen Decorator für die Ansichtsfunktion oder die Ansichtsklasse ein, wenn Sie die klassenbasierte Ansicht auf einer Django-Site verwenden. Ich verwende die klassenbasierte Ansicht.
Wenn Sie das Formular ausfüllen und seine Daten an den Server senden, müssen Sie Informationen über die Captcha-Validierungsantwort aus der Anfrage herausziehen und dann eine Anfrage an den Google-Server senden, um die Website zu überprüfen und das endgültige Validierungsergebnis zu erhalten. Die Antwort mit dem ersten Ergebnis der Captcha-Validierung wird im Feld g-recaptcha-response enthalten sein. Diese Antwort wird mit dem geheimen Schlüssel an die Google-Server gesendet, um die Website zu überprüfen und das Endergebnis zu erhalten Benutzerüberprüfung.
Um eine Anfrage zu erstellen, verwenden wir die requests -Bibliothek.
pip install requests
Dekorateur
Wir fügen den geheimen Schlüssel in Ihre Website-Einstellungen ein. Die einfachste Option besteht darin, ihn zu settings.py hinzuzufügen, obwohl dies nicht die sicherste ist.
GOOGLE_RECAPTCHA_SECRET_KEY = '6LdqzjEUAAAAAKTDYsfuwZce-oa214GC8QeChVBF'
Als Nächstes erstellen wir eine decorators.py -Datei, die den reCAPTCHA-Dekorator enthält. Wir platzieren diese Datei neben den Dateien views.py , models.py usw.
from django.conf import settings from django.contrib import messages import requests def check_recaptcha(function): def wrap(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 function(request, *args, **kwargs) wrap.__doc__ = function.__doc__ wrap.__name__ = function.__name__ return wrap
Dalle wickelt die notwendige Ansicht mit einem Dekorateur ein:
# -*- coding: utf-8 -*- from django.conf.urls import url from . import views from .decorators import check_recaptcha app_name = 'registration' urlpatterns = [ url(r'^register/$', check_recaptcha(views.RegisterView.as_view()), name='register'), ]
Und in der Ansicht selbst prüfen wir die Gültigkeit von reCAPTCHA. In meinem Fall war dies eine Ansicht, die von der FormView-Klasse geerbt wurde.
class RegisterView(FormView): form_class = UserCreationForm template_name = 'register.html' def form_valid(self, form): # проверка валидности reCAPTCHA if self.request.recaptcha_is_valid: form.save() return render(self.request, 'register_success.html', self.get_context_data()) return render(self.request, 'register.html', self.get_context_data())
Clientseite
Auf der Client-Seite müssen Sie den Skript-Verbindungscode und den Speicherort des Captchas hinzufügen und Fehlermeldungen anzeigen.
{% extends 'base.html' %} {% block content %} <form action="{% url 'register' %}" method="post"> {% csrf_token %} {{ form.as_p }} <script src='https://www.google.com/recaptcha/api.js'></script> <div class="form-group g-recaptcha" data-sitekey="6LdqzjEUAAAAABRAtK1a3QhIWbn46X_gdcXvhnbG"></div> {% if messages %} {% for message in messages %} {{ message }} {% endfor %} {% endif %} <input type="submit" value="Зарегистрироваться"> </form> {% endblock %}
Ergebnis
Als Ergebnis erhalten wir eine ziemlich einfache Implementierung von reCAPTCHA auf einer Django-Site.
Für Django empfehle ich Timeweb-Hoster VDS-Server .
Thank you! Really an elegant and fast solution!
You saved my day, thank again :-)
Sergio
Thank you for feed back. If you will have more questions, you can ask on the forum
Спасибо.
Только использую декоратор не в urls.py а перед views
Добрый день, а эти же действия не подходят для reCHAPTCHA v3?
Специально не проверял поддержку для версии 3
Как проверю напишу:)