{ "info": { "author": "Jun Young Lee", "author_email": "legshort@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "Django Rest Framework Mango\n===========================\n\nA set of viewset mixin for the `Django REST\nFramework. `__\n\nInstallation\n------------\n\n``pip install djangorestframework_mango``\n\nUsage\n-----\n\nActionMixin\n~~~~~~~~~~~\n\nIt has six action methods that can be use instead of compare action with.\n\n- is_create_action()\n- is_retrieve_action()\n- is_list_action()\n- is_update_action()\n- is_partial_update_action()\n- is_destroy_action()\n\n.. code:: python\n\n class ViewSet(ActionMixin, viewsets.GenericViewSet):\n queryset = Model.objects.all()\n serializer_class = ModelSerializer\n\n\n def get_queryset(self):\n queryset = super().get_queryset()\n\n if self.is_create_action:\n # change queryset for create\n queryset = queryset.change_for_create()\n elif self.is_retrieve_action():\n # change queryset for retrieve\n queryset = queryset.change_for_retrieve()\n elif self.is_list_action():\n # change queryset for list\n queryset = queryset.change_for_list()\n elif self.is_update_action():\n # change queryset for update\n queryset = queryset.change_for_update()\n elif self.is_partial_update_action():\n # change queryset for partial update\n queryset = queryset.change_for_partial_update()\n elif self.is_destroy_action():\n # change queryset for destroy\n queryset = queryset.change_for_destroy()\n\n return queryset\n\nQuerysetMixin\n~~~~~~~~~~~~~\n\nIt find action base queryset method and run it\n\n.. code:: python\n\n class ViewSet(QuerysetMixin, viewsets.GenericViewSet):\n queryset = Model.objects.all()\n serializer_class = ModelSerializer\n\n # this method run automatically when this viewset gets create action\n def create_queryset(self, queryset):\n queryset = queryset.change_for_create()\n return queryset\n\n # this method run automatically when this viewset gets list action\n def list_queryset(self, queryset):\n queryset = queryset.change_for_list()\n return queryset\n\n # this method run automatically when this viewset gets retrieve action\n def retrieve_queryset(self, queryset):\n queryset = queryset.change_for_retrieve()\n return queryset\n # this method run automatically when this viewset gets update action\n def update_queryset(self, queryset):\n queryset = queryset.change_for_update()\n return queryset\n # this method run automatically when this viewset gets partial update action\n def partil_update_queryset(self, queryset):\n queryset = queryset.change_for_partial_update()\n return queryset\n # this method run automatically when this viewset gets destroy action\n def destroy_queryset(self, queryset):\n queryset = queryset.change_for_delete()\n return queryset\n\n # this method run automatically when this viewset gets update_extra_profile action\n def update_extra_profile_queryset(self, queryset):\n queryset = queryset.change_for_update_extra_profile()\n return queryset\n\n @action(methods['POST'], detail=True)\n def update_extra_profile(self, request, pk=None):\n # this method calls update_extra_profile_queryset() internally\n queryset = self.get_queryset()\n\n return Response(serializer.data)\n\nSerializerMixin\n~~~~~~~~~~~~~~~\n\nYou can define multi serializers by action\n\n.. code:: python\n\n class ViewSet(QuerysetMixin, viewsets.GenericViewSet):\n queryset = Model.objects.all()\n serializer_class = ModelSerializer\n serializer_class_by_actions = {\n 'create': ModelCreateSerializer,\n 'list': ModelListSerializer,\n 'retrieve': ModelRetrieveSerializer,\n 'update': ModelUpdateSerializer,\n 'partial_update': ModelParitlaUpdateSerializer,\n 'destory': ModelDestorySerializer,\n 'update_extra_profile': ModelUpdateExtraProfileSerializer,\n }\n\n @action(methods['POST'], detail=True)\n def update_extra_profile(self, request, pk=None):\n # self.get_serializer returns ModelUpdateExtraProfileSerializer\n serializer = self.get_serializer()\n\n return Response(serializer.data)\n\nPermissionMixin\n~~~~~~~~~~~~~~~\n\nYou can define multi permissions by action\n\n.. code:: python\n\n class ViewSet(QuerysetMixin, viewsets.GenericViewSet):\n queryset = Model.objects.all()\n serializer_class = ModelSerializer\n permission_by_actions = {\n 'create': [Authenticated],\n 'list': [ReadOnly],\n 'retrieve': [AllowAny],\n 'update': [Owner],\n 'partial_update': [Owner],\n 'destory': [Owner],\n 'update_extra_profile': [Owner],\n }\n\n @action(methods['POST'], detail=True)\n def update_extra_profile(self, request, pk=None):\n # this method requires Owner permission\n serializer = self.get_serializer()\n\n return Response(serializer.data)\n\nSessionMiddleware\n~~~~~~~~~~~~~~~~~\n\nYou can use session data within request life cycle. - add\nSessionMiddleware - use session from view, serializer and model\n\n.. code:: python\n\n class ViewSet(viewsets.GenericViewSet):\n queryset = Model.objects.all()\n serializer_class = ModelSerializer\n\n def list_queryset(self, queryset):\n session = SessionMiddleware.get_session()\n session['current_user'] = self.request.user\n\n return queryset\n\n class Model(DjangoModel):\n\n @property\n def current_user(self):\n session = SessionMiddleware.get_session()\n session['current_user'] = self.request.user\n\n return session['current_user']\n\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/legshort/django-rest-framework-mango/", "keywords": "djangorestframework,drf,util,viewset", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "djangorestframework-mango", "package_url": "https://pypi.org/project/djangorestframework-mango/", "platform": "", "project_url": "https://pypi.org/project/djangorestframework-mango/", "project_urls": { "Homepage": "https://github.com/legshort/django-rest-framework-mango/" }, "release_url": "https://pypi.org/project/djangorestframework-mango/0.1.1/", "requires_dist": [ "django", "djangorestframework" ], "requires_python": "", "summary": "A set of viewset mixin for the Django REST Framework.", "version": "0.1.1" }, "last_serial": 5288408, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "494a92a43966580a1d10e831dc80d22f", "sha256": "e269744cc44aeae42846f26bdcf590ae29e755475427f7b8eb587d8c892fda58" }, "downloads": -1, "filename": "djangorestframework_mango-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "494a92a43966580a1d10e831dc80d22f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4494, "upload_time": "2019-05-01T09:28:00", "url": "https://files.pythonhosted.org/packages/a3/40/b941d296dec09b6bca72e0f378b8d6c12c8a2eb139f07ea7f1ba51127b78/djangorestframework_mango-0.1-py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "76ce3ee9bcb332283124cedce522b3b2", "sha256": "42b823f4dd378da9e26b4fef1fa45dfa57e05b482cec453ba4ac7d4ca13ae18b" }, "downloads": -1, "filename": "djangorestframework_mango-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "76ce3ee9bcb332283124cedce522b3b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4542, "upload_time": "2019-05-19T14:09:15", "url": "https://files.pythonhosted.org/packages/c2/dc/c6b19f56c9894332a56d3bbc15ed71b658ea1a856725fb1b632600aa17e1/djangorestframework_mango-0.1.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "76ce3ee9bcb332283124cedce522b3b2", "sha256": "42b823f4dd378da9e26b4fef1fa45dfa57e05b482cec453ba4ac7d4ca13ae18b" }, "downloads": -1, "filename": "djangorestframework_mango-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "76ce3ee9bcb332283124cedce522b3b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4542, "upload_time": "2019-05-19T14:09:15", "url": "https://files.pythonhosted.org/packages/c2/dc/c6b19f56c9894332a56d3bbc15ed71b658ea1a856725fb1b632600aa17e1/djangorestframework_mango-0.1.1-py3-none-any.whl" } ] }