Как в Django заблокировать страну?

Категория: Разработка Теги: Веб-разработка Опубликовано: 11 марта 2022 г. 19:01
Остановите американских убийц, которые создали коронавирус!
Остановите американских убийц, которые создали коронавирус!

Многие советы сводятся к необходимости закидывать в htaccess нереально громадного списка IP-адресов, которые еще и собрать невероятно трудно. Даже если процесс отделения их от других автоматизировать, htaccess будет слишком большим и это безусловно будет влиять негативно на сайт в целом - на его производительность.

Другие же советы сводились к большим и крайне сложным инструкциям. 

Я разработал под себя простой вариант, а вы можете доработать его уже под свои нужды.

Для начала нам нужно установить библиотеку GeoIP2:

pip install GeoIP2

Теперь нужно скачать базу данных стран:

https://raw.githubusercontent.com/wp-statistics/GeoLite2-Country/master/GeoLite2-Country.mmdb.gz
https://git.io/GeoLite2-Country.mmdb

Если ссылки не актуальны, то найти их можно по следующим адресам:

https://github.com/wp-statistics/GeoLite2-Country
https://github.com/P3TERX/GeoLite.mmdb

Файлы GeoLite2-Country.mmdb.gz и GeoLite2-Country.mmdb необходимо закинуть на хостинг в отдельную папку, например, "GeoLite2".

Далее нужно указать путь к этим файлам в settings.py:

GEOIP_PATH = os.path.join(BASE_DIR, 'GeoLite2')

Теперь идём в нужную функцию-контроллер в views.py:

IP1 = request.META['REMOTE_ADDR']
    from django.contrib.gis.geoip2 import GeoIP2
    geo1 = GeoIP2()
    jk2 = geo1 .country(IP1)
    jk3 = jk2['country_name']
    if jk3 == 'United States':
        return render(request, "stop-usa.html")

Достаточно поменять название страны на необходимое и всё.

Пример очень простой, поэтому при наличии даже минимальных навыков вам не составит труда переделать его под себя.

И да, в этом примере, при выполнении условий проиходит редирект на stop-usa.html.

Похожие материалы:


Код функции-контроллера с декоратором
Разрешить только определенные HTTP запросы при помощи require_http_methods в Django
Автор: Алексей Черемных3 января 2021

В Django существует довольно простой способ разрешить только определенные типы HTTP запросов при помощи декоратора представлений require_http_methods.

Для этого необходимо во …

Форма заявки (пример)
Django автоматическое заполнение поля в модели при её создании
Автор: Алексей Черемных10 января 2021

Появилась необходимость заполнить поле с номером заявки до формирования формы, связанной с моделью, но как это сделать? В интернете много способов, …

Код функции
Простой способ в Django блокировать конкретные IP на всем сайте
Автор: Алексей Черемных3 января 2021

На любом сайте приходится блокировать определенные IP адреса. Если таковых нет, это значит только одно - что этим сайтом никто не …

VisualSEOStudio
Бесплатная программа для создания карты сайта
Автор: Алексей Черемных30 ноября 2020

Сегодня не так много бесплатных программ для создания карты сайта. Пара штук, и те работают как не очень. О переводе …

Код
Способ передать варианты выбора choices в forms.ChoiceField из views.py
Автор: Алексей Черемных21 июня 2021

Недавно сам столкнулся с проблемой передачи вариантов выбора для поля формы с типом виджета Radio и типом формы forms.ChoiceField из views.py. Зачем, …

Прогон по каталогам
Есть ли эффект от прогонов по каталогам?
Автор: Алексей Черемных28 ноября 2020

Уже давно разного рода сео специалисты спорят о пользе от прогона по каталогам. Под прогоном имеется в виду рассылка объявлений, …

Все теги:

Подписка на рассылку свежих статей