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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误