Это будет первая статья об использовании набора установленных утилит, присутствующих в ядре сайта EVILEG. Эта часть программного кода сайта находится в открытом доступе, поэтому я хочу рассказать о том, какой функционал присутствует в этой батарее и как ею пользоваться.
Я начну с использования Google reCAPTCHA и того, что требуется для быстрой реализации этой функции.
Зарегистрируйте reCAPTCHA
Первым шагом является регистрация сайта в admin reCAPTCHA .
Реализация
Добавление Google reCAPTCHA будет состоять из двух шагов:
- Реализация reCAPTCHA на стороне клиента, т.е. в HTML-коде
- Внедрение reCAPTCHA на серверной стороне
При регистрации сайта будет сгенерировано два ключа:
- Ключ сайта — ключ, который будет размещен на HTML-странице.
- Секретный ключ — ключ, который будет использоваться для связи сайта и сервиса Google reCAPTCHA.
Процесс реализации будет следующим. На HTML-странице в форме, требующей проверки действий пользователя, разместите скрипт reCAPTCHA и ключ сайта.
На стороне сервера мы добавляем декоратор в метод запроса для представления на основе классов.
Установить EVILEG-CORE
pip install evileg-core
Также evileg_core подтянет все необходимые для этого пакета зависимости. Включая библиотеку requests , которая используется для выполнения запроса проверки капчи.
settings.py
Добавить evileg_core в установленные приложения
INSTALLED_APPS = [ ... 'evileg_core', ]
Мы также добавляем секретный ключ reCAPTCHA и ключ сайта.
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 validation check 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 я рекомендую Timeweb Hosting VDS Server .