项目作者: pyepye

项目描述 :
Integration between Django and Amplitude to help send events via the Amplitude HTTP API (v2)
高级语言: Python
项目地址: git://github.com/pyepye/django-amplitude.git
创建时间: 2020-05-28T01:36:38Z
项目社区:https://github.com/pyepye/django-amplitude

开源协议:MIT License

下载


Django Amplitude

Integration between Django and Amplitude.com to help send events via the Amplitude HTTP API (v2)

Quick start

Installation

  1. pip install django-amplitude

Add amplitude to your INSTALLED_APPS. If they are not already the Django sessions app must also be added:

  1. INSTALLED_APPS = [
  2. ...
  3. 'django.contrib.sessions',
  4. ...
  5. 'amplitude',
  6. ]

If you do not have it already you must also add the Django django.contrib.sessions.middleware.SessionMiddleware. Then add the ampliturde SessionInfo middleware after the SessionMiddleware:

  1. MIDDLEWARE = [
  2. ...
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. ...
  5. 'amplitude.middleware.SessionInfo',
  6. ]

Now set your Amplitude API key and user / group options in your settings.py:

  1. # Settings > Projects > <Your project> > General > API Key
  2. AMPLITUDE_API_KEY = '<amplitude-project-api-key>'
  3. # You can also choose if you want to include user and group data (Default False)
  4. AMPLITUDE_INCLUDE_USER_DATA = False
  5. AMPLITUDE_INCLUDE_GROUP_DATA = False

Note: If you want to include user or group data you must ensure the Django auth is setup correctly. This includes adding django.contrib.auth and django.contrib.contenttypes to INSTALLED_APPS and django.contrib.auth.middleware.AuthenticationMiddleware to MIDDLEWARE.

For more information on the above settings see the configuration settings section.

Usage

Page view events

If you want to send an event to Amplitude on every page view you can use the django-amplitude SendPageViewEvent middleware to your MIDDLEWARE in your Django settings.

This will automatically create an event called Page view with all the information it’s possible to pull from the Django request object such as URL path and parameters, user agent info, IP info, user info etc.

It must be placed after the amplitude.middleware.SessionInfo middleware:

  1. MIDDLEWARE = [
  2. 'django.contrib.sessions.middleware.SessionMiddleware',
  3. ...
  4. 'amplitude.middleware.SessionInfo',
  5. 'amplitude.middleware.SendPageViewEvent',
  6. ]

While using SendPageViewEvent if there are certain URLs that you do not want to update Amplitude with you can use the AMPLITUDE_IGNORE_URLS setting. This setting take a list of relative urls or URL names. Relative URLS most match exactly so need to start with a forward slash (/)

  1. AMPLITUDE_IGNORE_URLS = ['my_url_name', '/testurl']

Sending events manually

If you want to send your own events:

  1. from amplitude import Amplitude
  2. amplitude = Amplitude()
  3. event_data = amplitude.build_event_data(
  4. event_type='Some event type',
  5. request=request,
  6. )
  7. amplitude.send_events([event_data])

The above request will include URL and HTTP header info in the event_properties. If you want to override the event properties you can pass them through to build_event_data:

  1. event_data = amplitude.build_event_data(
  2. event_type='User purchase',
  3. request=request,
  4. event_properties={'products': ['laptop', 'phone']}
  5. )

build_event_data missing event data keys

The build_event_data method (and in extension the SendPageViewEvent middleware) currently does not send the following keys from UploadRequestBody type in Amplitude HTTP API (v2):

  • event_id
  • app_version
  • carrier
  • price
  • quantity
  • revenue
  • productId
  • revenueType
  • idfa
  • idfv
  • adid
  • android_id
  • dma
  • insert_id

If you want to record an event in Amplitude with any of these keys you must use build and send your own event data using amplitude.build_event_data where you can pass any of the above as kwargs:

  1. amplitude = Amplitude()
  2. event_data = amplitude.build_event_data(
  3. event_type='Some event type',
  4. request=request,
  5. app_version='1.0.0',
  6. )
  7. amplitude.send_events([event_data])

Building you own event

If you are not happy with the data from build_event_data you can build you own event data based on the UploadRequestBody type in Amplitude HTTP API (v2). If you want to do this There are a few helper functions to build different parts of the event data from the Django request object:

  1. amplitude.event_properties_from_request(request) # Gets URL and HTTP header data
  2. amplitude.device_data_from_request(request) # Gets device info from user agent
  3. amplitude.user_properties_from_request(request) # Gets info from user model
  4. amplitude.group_from_request(request) # Gets the list of groups a user is in
  5. amplitude.location_data_from_ip_address(ip_address) # Gets location data from IP if GeoIP2 is setup
  • user_properties_from_request will return an empty dict if AMPLITUDE_INCLUDE_USER_DATA is False
  • group_from_request will return an empty dict if AMPLITUDE_INCLUDE_GROUP_DATA is False

Configuration settings

Below are the different settings that can be overridden. To do so place the setting into your settings.py.

  1. # This variable is required when amplitude is added to INSTALLED_APPS
  2. AMPLITUDE_API_KEY = '<amplitude-project-api-key>'
  3. # If the users Django user information is included in the Amplitude event.
  4. # This includes - username, email, full_name, is_staff, is_superuser
  5. AMPLITUDE_INCLUDE_USER_DATA = False
  6. # If the groups the user is a member of is included in the Amplitude event.
  7. # A list of the group names will be sent in the request.
  8. AMPLITUDE_INCLUDE_GROUP_DATA = False
  9. # A list of URLs which `SendPageViewEvent` middleware should not run for.
  10. # Each item in the list can be either a URL or url name
  11. AMPLITUDE_IGNORE_URLS = ['home', '/please/ignore/']
  12. # The minimum permitted length for user_id & device_id fields
  13. # https://developers.amplitude.com/docs/http-api-v2#properties-2
  14. AMPLITUDE_MIN_ID_LENGTH = None