Це буде перша стаття з використання набору усталених утиліт, які присутні в ядрі сайту EVILEG. Ця частина програмного коду сайту знаходиться в open source, тому хочу розповісти про те, який функціонал присутній в даній батарейці і як його використовувати.
Почну з використання Google reCAPTCHA , і що потрібно, щоб швидко впровадити даний функціонал.
Реєстрація reCAPTCHA
Першим кроком необхідно зареєструвати сайт в адмінки reCAPTCHA .
Впровадження
Додавання Google reCAPTCHA буде складатися з двох етапів:
- Впровадження reCAPTCHA на клієнтській стороні, тобто в HTML коді
- Впровадження reCAPTCHA на серверній стороні
При реєстрації сайту буде згенеровано два ключа:
- Site key - Ключ, який буде міститися на HTML сторінці
- Secret key - Ключ, який буде використовуватися для комунікації сайту і сервісом Google reCAPTCHA
Процес впровадження буде наступний. На HTML сторінці в формі, яка вимагає валідації дій користувача, поміщаємо script reCAPTCHA, і ключ сайту.
На стороні сервера додаємо декоратор на метод запиту для Class Based View.
Установка EVILEG-CORE
pip install evileg-core
Також evileg_core підтягне все необхожімо для даного пакета залежності. У тому числі бібліотеку requests , яка використовується для виконання запиту перевірки каптчі.
settings.py
Додаємо evileg_core в встановлені додатки
INSTALLED_APPS = [ ... 'evileg_core', ]
А також додаємо reCAPTCHA Secret Key і Site Key.
GOOGLE_RECAPTCHA_SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' GOOGLE_RECAPTCHA_SITE_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
urls.py
Обертаємо декоратором необхідну в'юшку
# -*- coding: utf-8 -*- from django.conf.urls import url from evileg_core.decorators import recaptcha from . import views app_name = 'registration' urlpatterns = [ path('register/', recaptcha(views.RegisterView.as_view()), name='register'), ]
views.py
А в самій в'юшки робимо перевірку на валідність reCAPTCHA. У моєму випадку це була в'юшки, успадковувати від FormView класу.
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())
клієнтська сторона
На стороні клієнта необхідно додати код підключення скрипта, місце розташування каптчі, а також виведення повідомлень про помилки.
{% extends 'home/base.html' %} {% block content %} <form action="{% url 'registration:register' %}" method="post"> {% csrf_token %} {{ form.as_p }} {% load recaptcha from evileg_core %} {% recaptcha 'form-group' %} {% if messages %} {% for message in messages %} {{ message }} {% endfor %} {% endif %} <input type="submit" value="Register"> </form> {% endblock %}
Результат
У підсумку отримуємо досить просте впровадження reCAPTCHA на Django сайті.
Для Django рекомендую VDS-сервера хостера Timeweb .