Создание идентификатора Google Analytics ID переменной - PullRequest
0 голосов
/ 30 сентября 2011

Мое приложение обслуживает несколько доменов, которые, как я понимаю, должны выполняться пространствами имен, которые я исследую.Поскольку несколько доменов должны иметь несколько идентификаторов аналитики: s Я получаю идентификатор аналитики из кода, но я хочу сделать его еще более настраиваемым:

    if os.environ.get('HTTP_HOST').endswith('.br') \
        or os.environ['SERVER_NAME'].endswith('.br'):
        data[u'analytics'] = 'UA-637933-12'
else:
        data[u'analytics'] = 'UA-637933-18'

    self.response.out.write(template.render(os.path.join(os.path.dirname(__file__),
                            'templates', name + '.html'), data))

Приведенный выше идентификатор аналитики устанавливается на ..- 12, если это мойбразильский домен и другой ID ...- 18, если это моя точка ком.Но это только для 2 доменов, и это не просто обобщается.Как я могу добиться этой функции более научным и масштабируемым образом, чтобы стало проще добавлять мое приложение в домен без добавления домена в мое приложение вручную?

Я полагаю, что пространства имен - это путь, так какдомены - это домены приложений Google, но я не понимаю, как использовать пространства имен :

def namespace_manager_default_namespace_for_request():
  """Determine which namespace is to be used for a request.

  The value of _NAMESPACE_PICKER has the following effects:

  If _USE_SERVER_NAME, we read server name
  foo.guestbook-isv.appspot.com and set the namespace.

  If _USE_GOOGLE_APPS_DOMAIN, we allow the namespace manager to infer
  the namespace from the request.

  If _USE_COOKIE, then the ISV might have a gateway page that sets a
  cookie called 'namespace', and we set the namespace to the cookie's value
  """
  name = None

  if _NAMESPACE_PICKER == _USE_SERVER_NAME:
    name = os.environ['SERVER_NAME']
  elif _NAMESPACE_PICKER == _USE_GOOGLE_APPS_DOMAIN:
    name = namespace_manager.google_apps_namespace()
  elif _NAMESPACE_PICKER == _USE_COOKIE:
    cookies = os.environ.get('HTTP_COOKIE', None)
    if cookies:
      name = Cookie.BaseCookie(cookies).get('namespace')

  return name

Полагаю, мне следует использовать менеджер пространства имен, получить пространство имен и установить идентификатор аналитики в соответствии св пространство имен, но как?

Спасибо

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Самый простой способ сделать это с помощью Python dict:

analytics_ids = {
  'mydomain.br': 'UA-637933-12',
  'mydomain.com': 'UA-637933-18',
}

data['analytics'] = analytics_ids[self.request.host]

Если у вас есть другая статистика для каждого домена, вы можете сделать каждую запись в словаре кортежем, вложенным диктом иликакой-то объект конфигурации, затем извлеките и сохраните его в соответствии с текущим запросом для удобства поиска.

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

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

1 голос
/ 30 сентября 2011

Полагаю, у вас запущены два экземпляра одного и того же приложения.Вместо того, чтобы возиться с пространствами имен, я предлагаю вам превратить Analytics ID в переменную конфигурации.

То есть либо сохраните его в файле конфигурации, либо в базе данных, которую использует ваш Интернет.Затем установите один идентификатор для каждого развертывания (в каждом месте, где запущена ваша сеть) и получите его во время выполнения.

Например:

Файл конфигурации:

analyticsId="UA-637933-12"

Код:

data[u'analytics'] = getValueFromConfig("analyticsId")

, где getValueFromConfig - это функция, которую вы определяете для чтения соответствующего значения,(Чтобы использовать файлы конфигурации без усилий, вы можете использовать модуль ConfigParser .)

Теперь вы приобрели гораздо большую гибкость - вам не нужно выполнять какие-либо проверки и переключение во время выполнения,Вы должны определить значение только один раз для каждого веб-сайта и покончить с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...