- 1. Register reCAPTCHA
- 2. Implementation
- 1. Install EVILEG-CORE
- 2. settings.py
- 3. urls.py
- 4. views.py
- 5. Client side
- 3. Result
This will be the first article on the use of a set of established utilities that are present in the core of the EVILEG site. This part of the site’s program code is in open source, so I want to talk about what functionality is present in this battery and how to use it.
I'll start by using Google reCAPTCHA , and what is required to quickly implement this functionality.
Register reCAPTCHA
The first step is to register the site in the admin reCAPTCHA .
Implementation
Adding Google reCAPTCHA will consist of two steps:
- Implementing reCAPTCHA on the client side, i.e. in HTML code
- Внедрение reCAPTCHA на серверной стороне
When registering a site, two keys will be generated:
- Site key - The key to be placed on the HTML page
- Secret key - The key that will be used to communicate the site and the Google service reCAPTCHA
The implementation process will be as follows. On the HTML page in a form that requires validation of user actions, place the reCAPTCHA script and the site key.
On the server side, we add a decorator to the request method for Class Based View.
Install EVILEG-CORE
pip install evileg-core
Also evileg_core will pull up all the dependencies necessary for this package. Including the requests library, which is used to execute the captcha verification request.
settings.py
Add evileg_core to installed applications
INSTALLED_APPS = [ ... 'evileg_core', ]
We also add reCAPTCHA Secret Key and Site Key.
GOOGLE_RECAPTCHA_SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' GOOGLE_RECAPTCHA_SITE_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
urls.py
We wrap the necessary view with the decorator
# -*- 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
And in the view itself, we check the validity of reCAPTCHA. In my case, this was a view inherited from the FormView class.
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())
Client side
On the client side, you need to add the script connection code, the location of the captcha, as well as the output of error messages.
{% 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 %}
Result
As a result, we get a fairly simple implementation of reCAPTCHA on the Django site.
For Django I recommend Timeweb Hosting VDS Server .