В современном онлайн-мире важно знать, откуда приходит ваш сайт трафика, чтобы помочь владельцам сайта лучше понять своих посетителей. В этом руководстве мы строим очень базовый монитор трафика, монитор трафика отобразит подробную информацию о посетителей на сайте. Для каждого посетителя будет несколько столбцов, таких как время посещения, континента, страны и города. Эта статья была первоначально опубликована в моем блоге, Пиксельный район Отказ
Начало работы с IPStack API
IPSTACK Предлагает мощный IP-API в режиме реального времени в режиме геолокации в режиме геолокации в режиме реального времени, способное найти точное местоположение данных и оценивать угрозы безопасности, возникающие из рискованных IP-адресов. Результаты поставляются в миллисекундах в формате JSON или XML. Использование IPStack API вы сможете найти посетителей сайта на первый взгляд и настроить свой пользовательский опыт и приложение соответствующим образом.
Документация подробно описывает функции API, доступные параметры и направляющие интеграции на разных языках программирования.
Получить Бесплатно Клавиша доступа API для продолжения использования этого API.
Образец ответа API
Отзывы API IPStack поставляются с всесторонними данными, связанными с местоположением, данные, связанные с валютами, данные, связанные с цифровой зоной, данные, связанные с подключением и данные, связанные с безопасностью. Посмотрите на пример ниже.
Обратите внимание: для иллюстрации, которые мы включили как поиск имени хоста и модуль безопасности в ответе вышеуказанной API. Пожалуйста, обратитесь к разделам Инажем хоста имена и Безопасность Модуль для деталей.
{ "ip": "134.201.250.155", "hostname": "134.201.250.155", "type": "ipv4", "continent_code": "NA", "continent_name": "North America", "country_code": "US", "country_name": "United States", "region_code": "CA", "region_name": "California", "city": "Los Angeles", "zip": "90013", "latitude": 34.0453, "longitude": -118.2413, "location": { "geoname_id": 5368361, "capital": "Washington D.C.", "languages": [ { "code": "en", "name": "English", "native": "English" } ], "country_flag": "https://assets.ipstack.com/images/assets/flags_svg/us.svg", "country_flag_emoji": "🇺🇸", "country_flag_emoji_unicode": "U+1F1FA U+1F1F8", "calling_code": "1", "is_eu": false }, "time_zone": { "id": "America/Los_Angeles", "current_time": "2018-03-29T07:35:08-07:00", "gmt_offset": -25200, "code": "PDT", "is_daylight_saving": true }, "currency": { "code": "USD", "name": "US Dollar", "plural": "US dollars", "symbol": "$", "symbol_native": "$" }, "connection": { "asn": 25876, "isp": "Los Angeles Department of Water & Power" }, "security": { "is_proxy": false, "proxy_type": null, "is_crawler": false, "crawler_name": null, "crawler_type": null, "is_tor": false, "threat_level": "low", "threat_types": null } }
Предварительные условия
После лучших практик Python мы создадим виртуальную среду для нашего проекта и установим необходимые пакеты.
Во-первых, создайте каталог проекта.
$ mkdir djangoapp $ cd djangoapp
Теперь создайте виртуальную среду и установите необходимые пакеты.
Для MacOS и UNIX Systems:
$ python3 -m venv myenv $ source myenv/bin/activate (myenv) $ pip install django requests
Для Windows:
$ python3 -m venv myenv $ myenv\Scripts\activate (myenv) $ pip install django requests
Настройка вашего приложения Django
Во-первых, перейдите к каталогу DjangoApp мы создали и установили проект Django.
(myenv) $ django-admin startproject mainapp
Это будет автоматически генерировать некоторые файлы для вашего проекта Скелет:
mainapp/ manage.py mainapp/ __init__.py settings.py urls.py asgi.py wsgi.py
Теперь перейдите к каталогу, который вы только что создали (убедитесь, что вы находитесь в одном каталоге, что и Manage.py) и создайте каталог приложений.
(myenv) $ python manage.py startapp monitor
Это создаст следующее:
monitor/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
В файле mainapp/settings.py ищите следующую строку и добавьте приложение, которое мы только что создали выше.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'monitor', #new line ]
Убедитесь, что вы находитесь в каталоге монитора, создайте новый каталог, называемый шаблонами и новым файлом, называемым URLS.PY. Ваша структура каталога приложения монитора должна выглядеть так
monitor/ __init__.py admin.py apps.py migrations/ templates/ __init__.py models.py tests.py urls.py views.py
Убедитесь, что ваш файл MainApp/URLS.PY добавьте наш монитор URL-адрес приложения для включения URL-адресов, которые мы должны создавать следующие в приложении монитора:
from django.contrib import admin from django.urls import path, include urlpatterns = [ #path('admin/', admin.site.urls), path('', include('monitor.urls')),#monitor app url ]
Теперь, на мониторе/URLS.PY файле, добавьте наш сайт там:
from django.urls import path, include from . import views urlpatterns = [ path('', views.home, name="home"), path('monitor/', views.monitor, name="monitor"), #system monitor view to be created next ]
Создайте нашу модели базы данных, которые мы будем использовать информацию о сохранении посетителей нашего сайта. На мониторе/моделях .py файл:
from django.db import models # Create your models here. class Monitor(models.Model): continent = models.CharField(max_length=50, blank=True, null=True) country = models.CharField(max_length=50, blank=True, null=True) city = models.CharField(max_length=50, blank=True, null=True) capital = models.CharField(max_length=50, blank=True, null=True) datetime = models.DateField(max_length=50, blank=True, null=True) ip = models.CharField(max_length=50, blank=True, null=True) def __str__(self): return self.ip
Теперь на мониторе/Views.py файл добавьте строки ниже:
from django.shortcuts import render, redirect import requests import time import psutil import os from datetime import datetime from .models import Monitor from urllib.parse import urlparse from django.core.paginator import Paginator #traffic monitor def traffic_monitor(request): dataSaved = Monitor.objects.all().order_by('-datetime') # Getting loadover15 minutes load1, load5, load15 = psutil.getloadavg() cpu_usage = int((load15/os.cpu_count()) * 100) ram_usage = int(psutil.virtual_memory()[2]) p = Paginator(dataSaved, 100) #shows number of items in page totalSiteVisits = (p.count) #find unique page viewers & Duration pageNum = request.GET.get('page', 1) page1 = p.page(pageNum) #unique page viewers a = Monitor.objects.order_by().values('ip').distinct() pp = Paginator(a, 10) #shows number of items in page unique = (pp.count) #update time now = datetime.now() data = { "now":now, "unique":unique, "totalSiteVisits":totalSiteVisits, "cpu_usage": cpu_usage, "ram_usage": ram_usage, "dataSaved": page1, } return render(request, 'traffic_monitor.html', data) #home page def home(request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[0] else: ip = request.META.get('REMOTE_ADDR') response = requests.get('http://api.ipstack.com/'+ip+'?access_key=GETYOURACCESSKEY') #change from HTTP to HTTPS on the IPSTACK API if you have a premium account rawData = response.json() print(rawData) # print this out to look at the response continent = rawData['continent_name'] country = rawData['country_name'] capital = rawData['city'] city = rawData['location']['capital'] now = datetime.now() datetimenow = now.strftime("%Y-%m-%d %H:%M:%S") saveNow = Monitor( continent=continent, country=country, capital=capital, city=city, datetime=datetimenow, ip=ip ) saveNow.save() return render(request, 'home.html')
В вышеуказанном виде на главном представлении код начинается, получая IP-адрес пользователей. При получении посетителей IP-адреса мы затем сделаем запрос на IPStack с IP-адресом выше, добавленным к запросу и хранит результаты в базе данных. Если вы хотите собрать больше информации, просто добавьте их на модели и добавьте переменную, как описано выше с соответствующими данными, которые вы собираете, например, страна.
Для представления монитора движения код начинает покупать все данные на таблице монитора и отображает данные на HTML-странице, которую мы создадим ниже. Код также собирает CPU и использование оперативной памяти системы. Давайте теперь перейдем к оказанию данных выше на нашей веб-странице.
В папке монитора/шаблонов создайте Tharding_Monitor.html и home.html веб-страницу и добавьте строки ниже:
Монитор/шаблоны/Traffic_monitor.html Файл:
ALienx – Connections Site Visitors and Resources Monitor
Contact developer if CPU & RAM USAGE exceeds 80%
CPU Usage
{{ cpu_usage }}%RAM Usage
{{ ram_usage }}%Total Site Visits
{{ totalSiteVisits }}Unique Page Views
{{ unique }}User Sessions
Time IP Address Continent Country City {% for data in dataSaved.object_list %} Time IP Address Continent Country City {% endfor %} {{ data.datetime }} {{ data.ip }} {{ data.continent }} {{ data.country }} {{ data.city }}
На мониторе/шаблонах/home.html Файл:
Hello, world! Hello, world!
Тестирование, если это работает!
Миграция, затем запустите сервер, запустив команды ниже, а затем навигации по соответствующему порту:
(myenv) $ python manage.py makemigrations (myenv) $ python manage.py migrate (myenv) $ python manage.py runserver
Ниже приведен снимок моей реализации:
Спасибо за прочтение!
Я надеюсь, что вам понравился этот блог так же, как и я, в случае какого-либо вопроса, не стесняйтесь просить в разделе «Комментарий» ниже. Примечание, вы можете играть с этими данными, как вам нравится, например, добавление фильтра диапазона дат, чтобы показать посетителям по дате или показывать посетителям по стране.
Оригинал: "https://dev.to/paulwababu/build-a-web-traffic-monitor-with-django-and-ipstack-3n2g"