{ "info": { "author": "Rich Jones", "author_email": "rich@openwatch.net", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "![http://i.imgur.com/voUSI65.png](http://i.imgur.com/voUSI65.png)\ndjango-easy-split\n=================\n\nEasy split testing for Django!\n\nStop guessing and start testing! With **django-easy-split**, you'll be able to scientifically prove which aspects of\nyour site convert better than others. Works great for testing copy, designs, styles, layouts, assets, and even pricing and feature sets.\n\nWith just a few simple template tags, you'll be able to generate detailed reports about how visitors respond to various\nexperimental aspects of your site.\n\n## Features\n\n* Simple installation and usage\n* Statistical report generation using chi-squared tests (with optinal support for numypy/scipy)\n* Automatic bot exclusion\n\n# Installation and Basic Usage\n\nGetting started with **django-easy-split** is easy!\n\nJust install it, define your content to be tested and your goals,\nthen sit back, wait for the data to roll in, then finally analyze and view your reports. You can do pretty much\neverything right from your templates, there's no need for you to ever create your data models manually.\n\n#### Installation\n\n0. Install django-easy-split\n\n ```python\n pip install django-easy-split\n ```\n\n1. Add 'easy_split' to your INSTALLED_APPS setting like this:\n\n ```python\n INSTALLED_APPS = (\n ...\n 'easy_split',\n )\n ```\n\n2. Sync your DB:\n\n ```python\n python manage.py syncdb\n ```\n\n3. Add **easy_split** to your URLs:\n\n ```python\n urlpatterns = patterns('',\n\n url(r'^admin/doc/', include('django.contrib.admindocs.urls')),\n url(r'^admin/split/', include('easy_split.admin_urls')),\n url(r'^admin/', include(admin.site.urls)),\n\n url(r'^split/', include('easy_split.urls')),\n ```\n\n#### Basic Usage\n\n4. Assign your visitors to experimental groups by wrapping your views with this decorator:\n\n ```python\n from easy_split.decorators import set_experiment_user\n\n @set_experiment_user\n def landing_page(request):\n return render_to_response('split_me.html', {}, context_instance=RequestContext(request))\n ```\n\n5. Include the necessary bot-excluding JavaScript in your base HTML. No jQuery is required!:\n\n ```html\n {% load easy_split %}\n\n \n {% split_js %}\n \n ```\n\n6. Define your test content:\n\n ```html\n\n {% split try_or_buy control %}\n \n Buy now!\n \n {% endsplit %}\n\n {% split try_or_buy test %}\n \n Try it free!\n \n {% endsplit %}\n ```\n\n7. Set up your goals. The easiest way to do it is with this simple tag put on your goal page (ex, on the post-payment page). You can also define them programatically in your views.\n\n ```html\n {% goal \"try_or_buy\" %}\n ```\n\n8. Test it out! Make sure that all of your URLs work and that GoalRecords are being created in your database.\n\n9. Finally, once enough data has been collected over time, run:\n\n ```python\n python manage.py update_experiment_reports\n ```\n\n to generate your reports, then browse over to **/admin/split/** to see your reports!\n\n\n#### Programatic Usage\n\n**django-easy-split** can also be used directly in your Django views rather than in your templates. This is useful if you're testing whole features, and not just copy or style changes.\n\nThere are two important bits here: testing users and recording results.\n\nTo split and route your experimental users, \n\n```python\nfrom easy_split.models import Experiment\nfrom easy_split.utils import WebUser\nfrom easy_split.decorators import set_experiment_user\n\n@set_experiment_user\ndef landing_page(request):\n if Experiment.test(\"my_experiment_name\", WebUser(request)):\n return render_to_response('new_landing.html', {}, context_instance=RequestContext(request))\n else:\n return render_to_response('landing.html', {}, context_instance=RequestContext(request))\n```\n\nThen, you'll want to record the records of events which pass the test:\n\n```python\nfrom easy_split.models import GoalRecord\nfrom easy_split.utils import WebUser\n\ndef conversion_page(request):\n\n # Record the converstion\n GoalRecord.record(\"my_experiment_name\", WebUser(request))\n\n return render_to_response('success.html', {}, context_instance=RequestContext(request))\n\n```\n\nAnd that's it!\n\n\n## Origins\n\nThis project is a direct descendant of [django-lean](https://github.com/e-loue/django-lean/). For now, it's probably\nbest that you swim upstream for whatever you are looking for. This package also contains changes mentioned in [Alex\nKehayias's blog post](http://alexkehayias.tumblr.com/post/15951774761/ab-split-testing-django) on the subject.\n\ndjango-easy-split intends to update and simplify django-lean. This may or may not ever actually come to fruition as a\nuseful product for the community - it may remain simply a mess of undocumented code only really useful for my own\npurposes. Still, I'll be working in public for the most part, so we shall see.\n\n## TODO\n\n* Documentation, Packaging, Examples, Tests\n* Email reporting?\n* Automated, integrated testing queues.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Miserlou/django-easy-split", "keywords": null, "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "django-easy-split", "package_url": "https://pypi.org/project/django-easy-split/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-easy-split/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/Miserlou/django-easy-split" }, "release_url": "https://pypi.org/project/django-easy-split/0.1.3/", "requires_dist": null, "requires_python": null, "summary": "Super easy split testing for your Django projects.", "version": "0.1.3" }, "last_serial": 1036341, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "409883ecb3386656178826f3ef84bb7d", "sha256": "5017452b19e8301a00e84c3dd5b27fafe7f12d28d472dee1ef528c8aea1c66e8" }, "downloads": -1, "filename": "django-easy-split-0.0.1.tar.gz", "has_sig": false, "md5_digest": "409883ecb3386656178826f3ef84bb7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17725, "upload_time": "2014-03-14T00:11:54", "url": "https://files.pythonhosted.org/packages/63/98/223f3a1fd4a5b6d06b2ee5b9df6d4d7932cd40a52620a1cdedfc5d1ec42a/django-easy-split-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "693491c724f5b496756b2db90aee60a4", "sha256": "1c01fc739620a0799220f41db4c3e22c229c6978bca8606c92e708492735b6d3" }, "downloads": -1, "filename": "django-easy-split-0.0.2.tar.gz", "has_sig": false, "md5_digest": "693491c724f5b496756b2db90aee60a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18127, "upload_time": "2014-03-14T18:53:32", "url": "https://files.pythonhosted.org/packages/26/7b/69f44313a7abfea07003aafa0bd0540b653ca8c2f7079462489363ddc533/django-easy-split-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "5fcff99a22b665801e51c10cc5b7f7ca", "sha256": "8ebb64806c3ddf65a413cdf58934b9f30134805fc19f19f8652643704326e810" }, "downloads": -1, "filename": "django-easy-split-0.0.3.tar.gz", "has_sig": false, "md5_digest": "5fcff99a22b665801e51c10cc5b7f7ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38704, "upload_time": "2014-03-14T20:30:47", "url": "https://files.pythonhosted.org/packages/4b/19/04737d9c3f978338eeef6f0b433a5db40d243091193f0bc0100af3edb6e5/django-easy-split-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "1e66a77f4e780c76fe79ef40fde899b3", "sha256": "de86981f8f2aa8fbd043151455c8ca9f996259ef7d4018b7b7bdb0784d55af41" }, "downloads": -1, "filename": "django-easy-split-0.0.4.tar.gz", "has_sig": false, "md5_digest": "1e66a77f4e780c76fe79ef40fde899b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38717, "upload_time": "2014-03-14T23:36:56", "url": "https://files.pythonhosted.org/packages/ee/65/746cd31191ec9f589b9ca0c7f0731e3f1b2b4049ba5515b2131dd18e7c56/django-easy-split-0.0.4.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "f696082a0d1bdbd4ea9ace57ad8ceb85", "sha256": "d47c08f3136aa3163d12e2696ef1cb31309809d2a088292af7368f5bf8852b13" }, "downloads": -1, "filename": "django-easy-split-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f696082a0d1bdbd4ea9ace57ad8ceb85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38739, "upload_time": "2014-03-15T00:03:59", "url": "https://files.pythonhosted.org/packages/fa/46/515b280c288fb7c8e28305e367b3da1cf63305b2ff3f9a797eeb30efa466/django-easy-split-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "b2a269a35564f3dcdcbeec3aa6e51227", "sha256": "8b75ab5d408dcb77e9d3b47ce72fbd3a094649fa49bfea48e4465fce20ae559a" }, "downloads": -1, "filename": "django-easy-split-0.1.1.tar.gz", "has_sig": false, "md5_digest": "b2a269a35564f3dcdcbeec3aa6e51227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38780, "upload_time": "2014-03-15T21:43:32", "url": "https://files.pythonhosted.org/packages/12/82/c7214042f647b057864b27baa730c502083e5a2289f203017986a38fbbd9/django-easy-split-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a65491cb98d87631821a897956c1b37e", "sha256": "a6dc8fa698095800838242f5b24a2f25c1f63e8a5a82d102bc50ba31455423f3" }, "downloads": -1, "filename": "django-easy-split-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a65491cb98d87631821a897956c1b37e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38777, "upload_time": "2014-03-15T21:56:58", "url": "https://files.pythonhosted.org/packages/7b/db/c940be9a0d3af485328c8232dbc6b845fb4eeaf0784e53f4b88d5b39f4d5/django-easy-split-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "8c139e9f10204197daefe26136324cc6", "sha256": "095226934c04cffffb4e468a794bb19af2bf313dfd031e7d40f91aad09003a8b" }, "downloads": -1, "filename": "django-easy-split-0.1.3.tar.gz", "has_sig": false, "md5_digest": "8c139e9f10204197daefe26136324cc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39405, "upload_time": "2014-03-20T19:49:32", "url": "https://files.pythonhosted.org/packages/98/ce/ce6beda38ede525adae828663392104475f3c3573559d0c0742d667bda99/django-easy-split-0.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8c139e9f10204197daefe26136324cc6", "sha256": "095226934c04cffffb4e468a794bb19af2bf313dfd031e7d40f91aad09003a8b" }, "downloads": -1, "filename": "django-easy-split-0.1.3.tar.gz", "has_sig": false, "md5_digest": "8c139e9f10204197daefe26136324cc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39405, "upload_time": "2014-03-20T19:49:32", "url": "https://files.pythonhosted.org/packages/98/ce/ce6beda38ede525adae828663392104475f3c3573559d0c0742d667bda99/django-easy-split-0.1.3.tar.gz" } ] }