{ "info": { "author": "Joakim Uddholm", "author_email": "tethik@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Security", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "=====================\nflask-session-captcha\n=====================\n\n.. image:: https://travis-ci.org/Tethik/flask-session-captcha.svg?branch=master\n :target: https://travis-ci.org/Tethik/flask-session-captcha\n :alt: Travis-CI\n\n.. image:: https://codecov.io/gh/Tethik/flask-session-captcha/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/Tethik/flask-session-captcha\n :alt: codecov\n\n.. image:: https://img.shields.io/pypi/v/flask-session-captcha.svg \n :target: https://pypi.python.org/pypi/flask-session-captcha\n :alt: Latest version \n\n.. image:: https://img.shields.io/pypi/pyversions/flask-session-captcha.svg\n :target: https://pypi.python.org/pypi/flask-session-captcha\n :alt: Supported python versions\n\n.. image:: https://img.shields.io/github/license/Tethik/flask-session-captcha.svg \n :target: https://github.com/Tethik/flask-session-captcha/blob/master/LICENSE\n\n\nA captcha implemention for flask using `flask-sessionstore `__ and `captcha `__ packages. Each captcha challenge answer is saved in the server side session of the challenged client.\n\nFor now it supports only simple numeric image captchas, but more could easily be added from the underlying `captcha package `__.\n\nRequirements\n------------\n* `Flask `__\n* `flask-sessionstore `__ with packages depending on which SESSION_TYPE you use. E.g. sqlalchemy requires flask-sqlalchemy.\n* `captcha `__\n\nUsage\n-----\n.. code-block:: python\n\n import uuid\n import logging\n from flask import Flask, request, render_template\n from flask_session import Session\n from flask_session_captcha import FlaskSessionCaptcha\n\n app = Flask(__name__)\n app.config[\"SECRET_KEY\"] = uuid.uuid4()\n app.config['CAPTCHA_ENABLE'] = True\n app.config['CAPTCHA_NUMERIC_DIGITS'] = 5\n app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'\n app.config['SESSION_TYPE'] = 'sqlalchemy'\n Session(app)\n captcha = FlaskSessionCaptcha(app)\n\n @app.route('/', methods=['POST','GET'])\n def some_route(): \n if request.method == \"POST\":\n if captcha.validate():\n return \"success\"\n else:\n return \"fail\"\n\n return render_template(\"form.html\")\n\n if __name__ == \"__main__\":\n app.debug = True\n logging.getLogger().setLevel(\"DEBUG\")\n app.run()\n\n\n\nTemplate can look as follows. `captcha.validate()` will be default try to validate against a form input with name \"captcha\".\n\n.. code-block:: html\n\n
\n {{ captcha() }} \n \n \n
\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Tethik/flask-session-captcha", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "flask-session-captcha", "package_url": "https://pypi.org/project/flask-session-captcha/", "platform": "", "project_url": "https://pypi.org/project/flask-session-captcha/", "project_urls": { "Homepage": "https://github.com/Tethik/flask-session-captcha" }, "release_url": "https://pypi.org/project/flask-session-captcha/1.1.0/", "requires_dist": [ "Flask", "captcha" ], "requires_python": "", "summary": "Captcha implementation for flask and flask-session.", "version": "1.1.0" }, "last_serial": 3092629, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f2412c7db6db3f9d03cf24d49a40401e", "sha256": "8af12b433457714a0b43cd037d4297726e17dd639c3ffd3b6b433611cda5d0d2" }, "downloads": -1, "filename": "flask_session_captcha-1.0.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "f2412c7db6db3f9d03cf24d49a40401e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6945, "upload_time": "2017-07-09T01:54:32", "url": "https://files.pythonhosted.org/packages/04/31/dedc6bf9121d1edf98ad823f6d9afb59515e49aa172d5b77a3194a8989ab/flask_session_captcha-1.0.0-py2.py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "e7727d976b1e38adbdb0ae4590c81698", "sha256": "6e29a5010600e6870e23b02ef550bc82436192917ebf736f753d13af9488a2f2" }, "downloads": -1, "filename": "flask_session_captcha-1.0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "e7727d976b1e38adbdb0ae4590c81698", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6041, "upload_time": "2017-07-09T05:04:33", "url": "https://files.pythonhosted.org/packages/3e/71/c371a838e135e0d2ad9ebf12dcff967af29e4e9f47dd5c757ff07877ac9f/flask_session_captcha-1.0.1-py2.py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "f3233abf1d8db66b55a274b37984cad7", "sha256": "7cc5740e83bff49120a6d6f1e57ea503fd045736f1c6402c215037831f0880d1" }, "downloads": -1, "filename": "flask_session_captcha-1.0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "f3233abf1d8db66b55a274b37984cad7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6004, "upload_time": "2017-07-15T09:29:26", "url": "https://files.pythonhosted.org/packages/3c/30/1e2b000b88b162b6e168c1abec47235fc8cef1b5d2af2da8ae4b4d339250/flask_session_captcha-1.0.2-py2.py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "2cee37f1da12acd12936e4d2ba1263e5", "sha256": "47ddfcfe8db253ea3128c5786c6dea4fc856f36b0ad4eb17c30a5a31cc7f8cc9" }, "downloads": -1, "filename": "flask_session_captcha-1.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "2cee37f1da12acd12936e4d2ba1263e5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6030, "upload_time": "2017-07-16T16:24:01", "url": "https://files.pythonhosted.org/packages/97/92/597b8a7295a0c2f126e111e59a015b231669076eacb1df0d8ad2ab12b838/flask_session_captcha-1.0.3-py2.py3-none-any.whl" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "49f9deeb2fcd7582d66d45ea624a9526", "sha256": "e65ddd3c269f6a27b64b5badb3aa6ff31642f044863dd33240ba810e69705159" }, "downloads": -1, "filename": "flask_session_captcha-1.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "49f9deeb2fcd7582d66d45ea624a9526", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6048, "upload_time": "2017-08-12T19:20:26", "url": "https://files.pythonhosted.org/packages/cc/81/bd8837aea807db9ced9e32a6fb45fef72d318c7338e39b4c00f1bd30f1bb/flask_session_captcha-1.1.0-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "49f9deeb2fcd7582d66d45ea624a9526", "sha256": "e65ddd3c269f6a27b64b5badb3aa6ff31642f044863dd33240ba810e69705159" }, "downloads": -1, "filename": "flask_session_captcha-1.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "49f9deeb2fcd7582d66d45ea624a9526", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6048, "upload_time": "2017-08-12T19:20:26", "url": "https://files.pythonhosted.org/packages/cc/81/bd8837aea807db9ced9e32a6fb45fef72d318c7338e39b4c00f1bd30f1bb/flask_session_captcha-1.1.0-py2.py3-none-any.whl" } ] }