python django ab测试框架
django-experiments的Python项目详细描述
django实验图片::https://codeship.com/projects/1c7cb7a0-caa8-0130-f2cb-36bd8b1bab14/status?branch=master
:target:https://codeship.com/projects/4846
django experiments是django的ab测试框架。
只有通过模板标记才能设置实验。
通过django管理员,您可以监视和控制实验进度。
你不知道什么是a b测试,请访问"wikipedia<;http://en.wikipedia.org/wiki/a/b-u testing>;` ` `.
-实验和任何依赖。如果从回购协议下载,建议使用pip安装依赖项:
:
dependencies
----`django<;https://github.com/django/django/>;`\br/>-`redis<;http://redis.io/>;`\br/>-`jsonfield<;https://github.com/bradjasper/django jsonfield/>;`
-`django modeldict<;https://github.com/disks/django modeldict>;`
(详细列表见requirements.txt)
它还要求在安装的应用程序中使用"django.contrib.humanize"。
示例项目是一个很好的开始和播放的地方。
结果存储在redis中并显示在django管理中。此框架的关键组件是:实验、备选方案和目标。
有关下载和文档,请参见"redis.io<;http://redis.io/>;``。
这是将设置文件配置到最低限度的快速指南。
首先,添加redis服务器的相关设置(我们将其作为本地主机运行):
:
实验redis主机=本地主机
实验redis端口=6379
实验redis数据库=0
下一步,将应用程序添加到已安装的应用程序中,激活它们:
:
n',
'django.contrib.humanize',
'experiments',
]
如上文所述包括"django.contrib.humanize",如果尚未包括的话。
想好了我们的目标,我们会再做一点。请确保
您已正确配置了静态URL设置。
mentsrentationmiddleware',
]
*注意,下面详细介绍了更多配置选项。*
实验和替代方案
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可以在Django管理员中手动创建实验。添加备选方案目前必须在模板标记中完成,或者调用相关代码,如下所述。
django实验的设计目的是在django模板内工作
,使设计者更容易。我们首先加载模块:
:
{%load experiments%}
,然后使用以下语法定义第一个实验和备选方案:
:
{%experiment experiment alternative%}
"register"查看
注册链接文本会导致更多用户完成注册过程。我们的第一个替代方案必须始终是"控制"替代方案。
如果实验被禁用,这是我们的备用方案。
::
{%experiment register_text control%}
<;a href="register.html">;立即注册。<;/a>;
{%endexperiment%}
gister link
表示"立即注册"。让我们定义另一个更礼貌的替代方案:
:
{%experiment register_text polite%}
<;a href="register.html">;请注册!<;/a>;
{%endexperiment%}
当
实验启用时,用户将被随机分配到每个
选项。此信息存储在注册中,这是用户、实验和分配给它们的选项的唯一组合。
请确保实验标记可以访问请求对象(不是常规模板的
问题,但您可能必须手动将其添加到包含标记中),否则将自动失败工作。
也可以使用实验注册分配标记(请注意,它使用与旧实验标记不同的字符串或变量):
:
{%experiment注册"实验"名称"alternative1""alternative2"作为分配的"alternative%"
{%ve=="alternative2"%}
<;a href="register.html">;请注册!<;/a>;
{%else%}
<;a href="register.html">;立即注册。<;/a>;
{%endif%}
您还可以将用户注册到实验中,并从python中找出他们是什么替代方案的一部分。在实验中注册用户并根据备选方案显示不同的结果:
::
控制':
text_to_show=get_normal_text()
如果用户未注册,则返回'control'。对于已注册实验但已分配到
控制组的用户,还返回"control"
-无法区分这些情况。
:
礼貌':
header_text=get_polite_text_summary()
elif alternative=='控制':
header_text=get_normal_text_summary()
默认情况下,参与者函数需要一个httprequest对象,但您可以将用户或会话作为关键字参数传递
:
nt_user).get_alternative('register_text')
参与者(session=session).get_alternative('register_text')
\*\*如果实验是在模板中定义的,而不是在管理员中定义的,则默认情况下将动态创建它们。这可以在
设置中覆盖。*
使用django管理员或通过
模板标记或代码创建实验后,必须在django
管理员中启用该实验,或手动启用该实验才能使其正常工作。
goals
~您可以在设置中的"实验"目标元组中指定它们。考虑到上面的
示例,我们希望在用户完成注册过程后触发目标。
ing.py:
:
实验目标=("注册",)
目标是唯一标识目标的简单字符串。
>我们的注册成功页面将包含目标模板标记:
:
{%实验目标"注册"%}
当用户加载页面时返回IRED。这不是射门的唯一方法。总共有四种记录目标的方法:
1。**django模板标记**(如上所述)。
::
{%实验目标"注册"%}
2。**服务器端**,使用Django视图中的某个python函数:
::
**javascript onclick**:
::
<;button onclick="experiments.goal('registration')">;完成注册<;/button>;
(请注意,这需要csrf身份验证。请参阅"django docs<;https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/ajax>;`
>4。**cookies**:
::
<;span data experiments goal="registration">;完全注册<;span>;
>可以使用空格作为分隔符通过cookie记录多个目标。
目标独立于实验,因为许多实验都可以
h有同样的目标。这些目标是在项目的settings.py文件中定义的。
正常地)。要使用它们,请安装保留中间件。访问定义为在
会话时长(默认为6小时)内没有页面视图。
注册
后第一次访问时,visit_not_present_count_goal触发器,应用于注册
时用户不在场的情况(例如发送电子邮件时)。所有实验都会跟踪这两个目标,因此在解释结果时请小心
只使用一个目标。
通过将
:::
{%load experiments%}
{%experiments\u confirm"human%}
这可以在设置中被快速覆盖,但要小心-机器人程序会把结果搞砸!
如果要自定义确认人工代码,可以更改"确认人工会话"键设置并自行管理设置值。
请注意,当参与者的"确认人工会话"和"设置会话"时,您需要调用参与者的"确认人工会话"ey]
等于true。
所有用户都将看到
控制选项,并且不会收集任何数据。
**enabled**-对所有用户全局启用实验。
settings
--
:
如果不存在,则切换框架是否应验证用户是否为人类。小心。
实验验证人类=错误
示例redis设置
实验redis主机=本地主机
实验redis端口=6379
实验redis数据库=0
nf.py对于其他设置
----
1.2.0
~~~~
-添加对django 1.10的支持(感谢@kobold)
-使requirements.txt更加灵活
-添加了对多个django版本的测试的tox支持(再次感谢@kobold!)
1.1.6
~转到1.9(感谢david12341235)
1.1.4
~~~~~~~
-修复实验"自动创建"标志(以前将其设置为true没有任何作用)
1.1.0
~~~~
-不再需要或使用Nexus-实验模型的标准Django管理员接管了Nexus以前提供的功能-注意这可能会导致e一些向后的不兼容性取决于媒体文件的包含方式
-通过管理将实验升级到特定的替代方案(而不是控制)
-新的实验注册分配标记(见下文)
<1.0.0
~django实验肯定已经准备好生产了,但也由于已合并到中的向后不兼容更改。
-django 1.7和1.8支持(包括自定义用户模型)
-修复了与保留目标有关的许多错误-在此更新之前,这些错误是不可信任的。有关详细信息,请参阅下面的"保留"部分。
-根据请求修复由参与者缓存引起的错误
-修复与确认人为相关的错误并使功能可插入
-向参与者添加了"强制选择"选项。注册(重要说明:强制选择以随机方式将生成可能无效的结果)
-删除Gargoyle集成和对不再需要它们的方法的额外"请求"参数,如已注册的(向后不兼容的更改)
-将ExperimentsMiddleware更改为ExperimentsRetentionMiddleware(向后兼容更改)
-添加了更多测试和日志记录
>0.3.5
~~~~
-为south添加迁移脚本
-在概率接近100%时修复呈现
-当用户多次执行操作时减少数据库负载
>0.3.4
~~~
-更新了js goa我来发布方法。需要csrf javascript。
-模板标记目标图像上的随机数以防止缓存
>0.3.3
~~~
-nexus再次处理的静态媒体
>0.3.2
~~br/>
-修复了丢失的编辑/删除图像
>0.3.1
~~
-替换了django static te模板标签。再次支持django 1.3!
0.3.0
~~~~
-添加了django权限支持。
-开始使用django static而不是nexus:media。(仅限Django 1.4)
:target:https://codeship.com/projects/4846
django experiments是django的ab测试框架。
只有通过模板标记才能设置实验。
通过django管理员,您可以监视和控制实验进度。
你不知道什么是a b测试,请访问"wikipedia<;http://en.wikipedia.org/wiki/a/b-u testing>;` ` `.
-实验和任何依赖。如果从回购协议下载,建议使用pip安装依赖项:
:
dependencies
----`django<;https://github.com/django/django/>;`\br/>-`redis<;http://redis.io/>;`\br/>-`jsonfield<;https://github.com/bradjasper/django jsonfield/>;`
-`django modeldict<;https://github.com/disks/django modeldict>;`
(详细列表见requirements.txt)
它还要求在安装的应用程序中使用"django.contrib.humanize"。
示例项目是一个很好的开始和播放的地方。
结果存储在redis中并显示在django管理中。此框架的关键组件是:实验、备选方案和目标。
有关下载和文档,请参见"redis.io<;http://redis.io/>;``。
这是将设置文件配置到最低限度的快速指南。
首先,添加redis服务器的相关设置(我们将其作为本地主机运行):
:
实验redis主机=本地主机
实验redis端口=6379
实验redis数据库=0
下一步,将应用程序添加到已安装的应用程序中,激活它们:
:
n',
'django.contrib.humanize',
'experiments',
]
如上文所述包括"django.contrib.humanize",如果尚未包括的话。
想好了我们的目标,我们会再做一点。请确保
您已正确配置了静态URL设置。
mentsrentationmiddleware',
]
*注意,下面详细介绍了更多配置选项。*
实验和替代方案
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
可以在Django管理员中手动创建实验。添加备选方案目前必须在模板标记中完成,或者调用相关代码,如下所述。
django实验的设计目的是在django模板内工作
,使设计者更容易。我们首先加载模块:
:
{%load experiments%}
,然后使用以下语法定义第一个实验和备选方案:
:
{%experiment experiment alternative%}
"register"查看
注册链接文本会导致更多用户完成注册过程。我们的第一个替代方案必须始终是"控制"替代方案。
如果实验被禁用,这是我们的备用方案。
::
{%experiment register_text control%}
<;a href="register.html">;立即注册。<;/a>;
{%endexperiment%}
gister link
表示"立即注册"。让我们定义另一个更礼貌的替代方案:
:
{%experiment register_text polite%}
<;a href="register.html">;请注册!<;/a>;
{%endexperiment%}
当
实验启用时,用户将被随机分配到每个
选项。此信息存储在注册中,这是用户、实验和分配给它们的选项的唯一组合。
请确保实验标记可以访问请求对象(不是常规模板的
问题,但您可能必须手动将其添加到包含标记中),否则将自动失败工作。
也可以使用实验注册分配标记(请注意,它使用与旧实验标记不同的字符串或变量):
:
{%experiment注册"实验"名称"alternative1""alternative2"作为分配的"alternative%"
{%ve=="alternative2"%}
<;a href="register.html">;请注册!<;/a>;
{%else%}
<;a href="register.html">;立即注册。<;/a>;
{%endif%}
您还可以将用户注册到实验中,并从python中找出他们是什么替代方案的一部分。在实验中注册用户并根据备选方案显示不同的结果:
::
控制':
text_to_show=get_normal_text()
如果用户未注册,则返回'control'。对于已注册实验但已分配到
控制组的用户,还返回"control"
-无法区分这些情况。
:
礼貌':
header_text=get_polite_text_summary()
elif alternative=='控制':
header_text=get_normal_text_summary()
默认情况下,参与者函数需要一个httprequest对象,但您可以将用户或会话作为关键字参数传递
:
nt_user).get_alternative('register_text')
参与者(session=session).get_alternative('register_text')
\*\*如果实验是在模板中定义的,而不是在管理员中定义的,则默认情况下将动态创建它们。这可以在
设置中覆盖。*
使用django管理员或通过
模板标记或代码创建实验后,必须在django
管理员中启用该实验,或手动启用该实验才能使其正常工作。
goals
~您可以在设置中的"实验"目标元组中指定它们。考虑到上面的
示例,我们希望在用户完成注册过程后触发目标。
ing.py:
:
实验目标=("注册",)
目标是唯一标识目标的简单字符串。
>我们的注册成功页面将包含目标模板标记:
:
{%实验目标"注册"%}
当用户加载页面时返回IRED。这不是射门的唯一方法。总共有四种记录目标的方法:
1。**django模板标记**(如上所述)。
::
{%实验目标"注册"%}
2。**服务器端**,使用Django视图中的某个python函数:
::
**javascript onclick**:
::
<;button onclick="experiments.goal('registration')">;完成注册<;/button>;
(请注意,这需要csrf身份验证。请参阅"django docs<;https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/ajax>;`
>4。**cookies**:
::
<;span data experiments goal="registration">;完全注册<;span>;
>可以使用空格作为分隔符通过cookie记录多个目标。
目标独立于实验,因为许多实验都可以
h有同样的目标。这些目标是在项目的settings.py文件中定义的。
正常地)。要使用它们,请安装保留中间件。访问定义为在
会话时长(默认为6小时)内没有页面视图。
注册
后第一次访问时,visit_not_present_count_goal触发器,应用于注册
时用户不在场的情况(例如发送电子邮件时)。所有实验都会跟踪这两个目标,因此在解释结果时请小心
只使用一个目标。
通过将
:::
{%load experiments%}
{%experiments\u confirm"human%}
这可以在设置中被快速覆盖,但要小心-机器人程序会把结果搞砸!
如果要自定义确认人工代码,可以更改"确认人工会话"键设置并自行管理设置值。
请注意,当参与者的"确认人工会话"和"设置会话"时,您需要调用参与者的"确认人工会话"ey]
等于true。
所有用户都将看到
控制选项,并且不会收集任何数据。
**enabled**-对所有用户全局启用实验。
settings
--
:
如果不存在,则切换框架是否应验证用户是否为人类。小心。
实验验证人类=错误
示例redis设置
实验redis主机=本地主机
实验redis端口=6379
实验redis数据库=0
nf.py对于其他设置
1.2.0
~~~~
-添加对django 1.10的支持(感谢@kobold)
-使requirements.txt更加灵活
-添加了对多个django版本的测试的tox支持(再次感谢@kobold!)
1.1.6
~转到1.9(感谢david12341235)
1.1.4
~~~~~~~
-修复实验"自动创建"标志(以前将其设置为true没有任何作用)
1.1.0
~~~~
-不再需要或使用Nexus-实验模型的标准Django管理员接管了Nexus以前提供的功能-注意这可能会导致e一些向后的不兼容性取决于媒体文件的包含方式
-通过管理将实验升级到特定的替代方案(而不是控制)
-新的实验注册分配标记(见下文)
<1.0.0
~django实验肯定已经准备好生产了,但也由于已合并到中的向后不兼容更改。
-django 1.7和1.8支持(包括自定义用户模型)
-修复了与保留目标有关的许多错误-在此更新之前,这些错误是不可信任的。有关详细信息,请参阅下面的"保留"部分。
-根据请求修复由参与者缓存引起的错误
-修复与确认人为相关的错误并使功能可插入
-向参与者添加了"强制选择"选项。注册(重要说明:强制选择以随机方式将生成可能无效的结果)
-删除Gargoyle集成和对不再需要它们的方法的额外"请求"参数,如已注册的(向后不兼容的更改)
-将ExperimentsMiddleware更改为ExperimentsRetentionMiddleware(向后兼容更改)
-添加了更多测试和日志记录
>0.3.5
~~~~
-为south添加迁移脚本
-在概率接近100%时修复呈现
-当用户多次执行操作时减少数据库负载
>0.3.4
~~~
-更新了js goa我来发布方法。需要csrf javascript。
-模板标记目标图像上的随机数以防止缓存
>0.3.3
~~~
-nexus再次处理的静态媒体
>0.3.2
~~br/>
-修复了丢失的编辑/删除图像
>0.3.1
~~
-替换了django static te模板标签。再次支持django 1.3!
0.3.0
~~~~
-添加了django权限支持。
-开始使用django static而不是nexus:media。(仅限Django 1.4)