{ "info": { "author": "Theodo", "author_email": "contact@theodo.co.uk", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.7" ], "description": "# drfrf\n\n[![CircleCI](https://circleci.com/gh/Theodo-UK/drfrf.svg?style=svg)](https://circleci.com/gh/Theodo-UK/drfrf)\n[![PyPI](https://badgen.net/pypi/v/drfrf)](https://pypi.org/project/drfrf/)\n\nDjango REST framework - redux-form connector\n\n## Installation\n\n`$ pipenv install drfrf`\n\n## Usage\n\nImport and use one of `ValidateCreateMixin` or `ValidateUpdateMixin`:\n\n```py\nfrom drfrf import ValidateCreateMixin, ValidateUpdateMixin\nfrom rest_framework import viewsets\nfrom rest_framework.decorators import detail_route, list_route\nfrom shop.models import CartItem\nfrom shop.serializers import CartItemSerializer\n\n\nclass CartItemViewSet(ValidateCreateMixin, ValidateUpdateMixin, viewsets.ModelViewSet):\n queryset = CartItem.objects.all()\n serializer_class = CartItemSerializer\n\n @list_route(methods=[\"post\"], url_path=\"validate\")\n def validate_list(self, request):\n return self.validate_create(request)\n\n @detail_route(methods=[\"post\"], url_path=\"validate\")\n def validate_detail(self, request, **kwargs):\n return self.validate_update(request, **kwargs)\n```\n\nPosting invalidate data to `/items/validate` would return error messages:\n\n```http\nHTTP/1.1 400 Bad Request\nContent-Length: 99\nContent-Type: application/json\n\n{\n \"amount\": [\n \"Your current credit is 36\u20ac, please top-up your account before adding to your cart.\"\n ]\n}\n```\n\nBrowse the complete example here: https://github.com/Theodo-UK/drfrf/tree/master/example/backend/shop\n\n## API\n\n### `ValidateCreateMixin`\n\nExposes one method: `validate_create` takes [Request](http://www.django-rest-framework.org/api-guide/requests/), validates the input data against the provided serializer and returns a [Response](http://www.django-rest-framework.org/api-guide/responses/).\n\n### `ValidateUpdateMixin`\n\nExposes one method: `validate_update` takes [Request](http://www.django-rest-framework.org/api-guide/requests/) with kwargs, validates the input data against the provided serializer and returns a [Response](http://www.django-rest-framework.org/api-guide/responses/).\n\n## Frontend integration\n\nIf you're using redux-form in your frontend, check out [drfrf for the front](../js).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Theodo-UK/drfrf", "keywords": "django rest framework django-rest-framework redux form redux-form form validation", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "drfrf", "package_url": "https://pypi.org/project/drfrf/", "platform": "", "project_url": "https://pypi.org/project/drfrf/", "project_urls": { "Homepage": "https://github.com/Theodo-UK/drfrf" }, "release_url": "https://pypi.org/project/drfrf/0.0.2/", "requires_dist": [ "djangorestframework" ], "requires_python": "", "summary": "Django REST framework - redux-form connector", "version": "0.0.2" }, "last_serial": 4323917, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "939713683decf2910dc175fbd4c22096", "sha256": "6369529b585cf2a4f87b2ebed733191f6f8bfe4b8a7633a5e5d52515b125011f" }, "downloads": -1, "filename": "drfrf-0.0.1.tar.gz", "has_sig": false, "md5_digest": "939713683decf2910dc175fbd4c22096", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2820, "upload_time": "2018-09-29T16:09:17", "url": "https://files.pythonhosted.org/packages/9c/05/89d589ecf3e81bf8f415bf396a33a4103787c310f60a3a2f9be8506f0615/drfrf-0.0.1.tar.gz" } ], "0.0.1a0": [ { "comment_text": "", "digests": { "md5": "c5f7d47616e95dc36bf9c3baac6dbc03", "sha256": "eef21783fa77643ee950f5519784677f2e3ceae1aec50793408cc7a117418b7f" }, "downloads": -1, "filename": "drfrf-0.0.1a0.tar.gz", "has_sig": false, "md5_digest": "c5f7d47616e95dc36bf9c3baac6dbc03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1042, "upload_time": "2018-09-27T22:00:42", "url": "https://files.pythonhosted.org/packages/5a/c1/5be3c3fb9d0ae4fa09a4b7c7b3f3cc40bb3e4934cf8e00ef147655e8ae72/drfrf-0.0.1a0.tar.gz" } ], "0.0.1b0": [ { "comment_text": "", "digests": { "md5": "3804a0deb9f9e2a70c129b668f5fc4f7", "sha256": "e93da7a35eb953af05e669ebc49dc22eb68f383c2b163f3251c9b6fc44b1d984" }, "downloads": -1, "filename": "drfrf-0.0.1b0.tar.gz", "has_sig": false, "md5_digest": "3804a0deb9f9e2a70c129b668f5fc4f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1046, "upload_time": "2018-09-27T22:19:03", "url": "https://files.pythonhosted.org/packages/c2/7b/fd39c62b537ab57c8f5a3960f45943dc0f3782c0fc40d08d7da421675877/drfrf-0.0.1b0.tar.gz" } ], "0.0.1rc0": [ { "comment_text": "", "digests": { "md5": "867145edd058dcde3cca705be5127149", "sha256": "a4b156af7fe45536f871d4ec461dd7afeb9db39442f5002576975b3dc1de33a3" }, "downloads": -1, "filename": "drfrf-0.0.1rc0.tar.gz", "has_sig": false, "md5_digest": "867145edd058dcde3cca705be5127149", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1487, "upload_time": "2018-09-27T22:43:45", "url": "https://files.pythonhosted.org/packages/84/08/88e1cb78e07b1d9c4b57332020f67f972a1345ef6ad73d8087bd3eb06301/drfrf-0.0.1rc0.tar.gz" } ], "0.0.1rc1": [ { "comment_text": "", "digests": { "md5": "fccb7f1d2411b4985404ac9969ea1574", "sha256": "af0c6262de23ffc1c9fafea53acb4fb1fd1df7bdee7fbf5e315d91a6d6081f5f" }, "downloads": -1, "filename": "drfrf-0.0.1rc1.tar.gz", "has_sig": false, "md5_digest": "fccb7f1d2411b4985404ac9969ea1574", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2829, "upload_time": "2018-09-29T16:01:22", "url": "https://files.pythonhosted.org/packages/1b/71/cce9f69ad4b4b35b3362cabfb8fd6bf64e24c0668c6b21beb44d0f352bae/drfrf-0.0.1rc1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "c1d86e777bc6cfe7bb08f71767f5d3e4", "sha256": "fc1a8499e68bf882829832c9cf4e54880e659102f084248cab1cb044badc6d59" }, "downloads": -1, "filename": "drfrf-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c1d86e777bc6cfe7bb08f71767f5d3e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3868, "upload_time": "2018-09-30T01:13:04", "url": "https://files.pythonhosted.org/packages/e1/d7/7deb0844694b2225fa91e18572012246c8f9cde715b177f3765fdf7d588c/drfrf-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9853223488f844604353edbec404f81", "sha256": "12f301878e61a0d2d20091c1d9bf3e62bb3ed7480f9141fc8539c8160f4bdeae" }, "downloads": -1, "filename": "drfrf-0.0.2.tar.gz", "has_sig": false, "md5_digest": "d9853223488f844604353edbec404f81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3098, "upload_time": "2018-09-30T01:13:06", "url": "https://files.pythonhosted.org/packages/0b/f0/f0178c17bfa6fa08cec23afcdb23b24638afee1477a18238a500f7058d54/drfrf-0.0.2.tar.gz" } ], "0.0.2a0": [ { "comment_text": "", "digests": { "md5": "7faf242e4368525e6ddb75e2d3682f12", "sha256": "5723dfa77fa369b6ad0fd5a22f42d106770ab87c959bbfc1b51c16681d6c21e6" }, "downloads": -1, "filename": "drfrf-0.0.2a0.tar.gz", "has_sig": false, "md5_digest": "7faf242e4368525e6ddb75e2d3682f12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3065, "upload_time": "2018-09-30T01:00:44", "url": "https://files.pythonhosted.org/packages/26/7f/c6961ec22e17e7af05e87f9f1aeac0f61feb2fe722455bea4ada8f33b7e0/drfrf-0.0.2a0.tar.gz" } ], "0.0.2b0": [ { "comment_text": "", "digests": { "md5": "a7c0c1ef92b9deae36ee7e582d41a2bf", "sha256": "18be410537389a50030379328e63c8965c38106ab94a2b0c6cc4c2f0783b98f8" }, "downloads": -1, "filename": "drfrf-0.0.2b0.tar.gz", "has_sig": false, "md5_digest": "a7c0c1ef92b9deae36ee7e582d41a2bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3097, "upload_time": "2018-09-30T01:03:01", "url": "https://files.pythonhosted.org/packages/0f/00/38e66d31d85aec555de4100cb26a74a1f71ecd9b83c78855d00cf9f09e05/drfrf-0.0.2b0.tar.gz" } ], "0.0.2b1": [ { "comment_text": "", "digests": { "md5": "4b0200417bd2cc27b6296633ad22a650", "sha256": "e7e0c9adb120ffa16c9a9b136c9a1bfb1254ffa26b11a8ce94da09ced9378e94" }, "downloads": -1, "filename": "drfrf-0.0.2b1.tar.gz", "has_sig": false, "md5_digest": "4b0200417bd2cc27b6296633ad22a650", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3101, "upload_time": "2018-09-30T01:04:16", "url": "https://files.pythonhosted.org/packages/6c/47/b7e6e8498e4ffd7fc08335d5893878bd154f163d7285b87e1bd232574a13/drfrf-0.0.2b1.tar.gz" } ], "0.0.2b2": [ { "comment_text": "", "digests": { "md5": "e3883b11375c8d9f5e25658924363d33", "sha256": "498b53100a70a8958ca66ac13a16c1143b606b89500dcd77d3660db76240d65e" }, "downloads": -1, "filename": "drfrf-0.0.2b2.tar.gz", "has_sig": false, "md5_digest": "e3883b11375c8d9f5e25658924363d33", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3100, "upload_time": "2018-09-30T01:07:23", "url": "https://files.pythonhosted.org/packages/cb/92/8c7b7c2383126abcb8b985e053bbef51fc759b686e596b2e0f64d0aac512/drfrf-0.0.2b2.tar.gz" } ], "0.0.2b3": [ { "comment_text": "", "digests": { "md5": "5f66c62607a29f235e78d8865df9791a", "sha256": "47bb5832f3383849dfdb5aa37804b864f3bb3091e353256bc656d4fa6ae653cb" }, "downloads": -1, "filename": "drfrf-0.0.2b3-py3-none-any.whl", "has_sig": false, "md5_digest": "5f66c62607a29f235e78d8865df9791a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3886, "upload_time": "2018-09-30T01:10:00", "url": "https://files.pythonhosted.org/packages/fc/69/5f0fb69b98ae6a7723b77e1a02ba483931bea1e41cc5e8fc6c13350647ce/drfrf-0.0.2b3-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c1d86e777bc6cfe7bb08f71767f5d3e4", "sha256": "fc1a8499e68bf882829832c9cf4e54880e659102f084248cab1cb044badc6d59" }, "downloads": -1, "filename": "drfrf-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c1d86e777bc6cfe7bb08f71767f5d3e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3868, "upload_time": "2018-09-30T01:13:04", "url": "https://files.pythonhosted.org/packages/e1/d7/7deb0844694b2225fa91e18572012246c8f9cde715b177f3765fdf7d588c/drfrf-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d9853223488f844604353edbec404f81", "sha256": "12f301878e61a0d2d20091c1d9bf3e62bb3ed7480f9141fc8539c8160f4bdeae" }, "downloads": -1, "filename": "drfrf-0.0.2.tar.gz", "has_sig": false, "md5_digest": "d9853223488f844604353edbec404f81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3098, "upload_time": "2018-09-30T01:13:06", "url": "https://files.pythonhosted.org/packages/0b/f0/f0178c17bfa6fa08cec23afcdb23b24638afee1477a18238a500f7058d54/drfrf-0.0.2.tar.gz" } ] }