{ "info": { "author": "Allran.Qu", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "IOS&Andorid API and Django Rest Framework\n\n--------\nOverview\n--------\n\n**App API support for Django REST Framework**\n\n* Documentation: None\n* Format specification: http://jsonapi.org/format/\n\n\n1. By default, Django REST Framework will produce a request like::\n\n http://example.com/api/1.0/identities/?page=1\n\nand then the response like::\n\n {\n \"count\": 200,\n \"msg\": \"success!\",\n \"data\": {\n \"list\": [\n {\n \"id\": 3,\n \"username\": \"john1\",\n \"full_name\": \"John Coltrane1\"\n },\n {\n \"id\": 4,\n \"username\": \"john2\",\n \"full_name\": \"John Coltrane2\"\n },\n ],\n \"total_count\": 2,\n \"total_pages\": 1\n }\n }\n\n2. if you want get object info, you will produce a request like:\n http://example.com/api/1.0/identities/1/\n\nand then the response like:\n\n::\n\n {\n \"count\": 200,\n \"msg\": \"success!\",\n \"data\": {\n \"id\": 1,\n \"username\": \"john2\",\n \"full_name\": \"John Coltrane2\"\n }\n }\n\n\n-----\nGoals\n-----\n\nAs a Django REST Framework APP API (short DJA) we are trying to address following goals:\n\n1. Support the `REST_FRAMEWORK_APPAPI` to compliance\n\n2. Be as compatible with `Django REST Framework`_ as possible\n\n3. Have sane defaults to be as easy to pick up as possible\n\n4. Be solid and tested with good coverage\n\n5. Be performant\n\n.. _JSON API: http://jsonapi.org\n.. _Django REST Framework: https://www.django-rest-framework.org/\n\n------------\nRequirements\n------------\n\n1. Python (3.5, 3.6, 3.7)\n2. Django (1.11, 2.1, 2.2)\n3. Django REST Framework (3.10)\n\nWe **highly** recommend and only officially support the latest patch release of each Python, Django and REST Framework series.\n\n------------\nInstallation\n------------\n\nFrom PyPI\n^^^^^^^^^\n\n::\n\n $ pip install djangorestframework-appapi\n\nFrom Source\n^^^^^^^^^^^\n\n::\n\n $ git clone https://github.com/allran/djangorestframework-appapi.git\n $ cd django-rest-framework-app-api\n $ pip install -e .\n\n\nRunning the example app\n^^^^^^^^^^^^^^^^^^^^^^^\n\nIt is recommended to create a virtualenv for testing. Assuming it is already\ninstalled and activated:\n\n::\n\n $ git clone https://github.com/allran/djangorestframework-appapi.git\n $ cd django-rest-framework-app-api\n $ pip install -U -e . -r requirements.txt\n $ django-admin migrate --settings=example_project.settings\n $ django-admin loaddata drf_example --settings=example_project.settings\n $ django-admin runserver --settings=example_project.settings\n\nBrowse to http://localhost:8000\n\n\nRunning Tests and linting\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIt is recommended to create a virtualenv for testing. Assuming it is already\ninstalled and activated:\n\n::\n\n $ pip install -Ur requirements.txt\n $ flake8\n $ pytest\n\n-----\nUsage\n-----\n\n\u4e00. ``rest_framework_app_api`` assumes you are using class-based renderers in Django\nRest Framework.\n\n::\n\n REST_FRAMEWORK = {\n 'DEFAULT_RENDERER_CLASSES': (\n 'rest_framework_app_api.renderers.JSONRenderer',\n ),\n }\n\nthen you can get the app response data\n\n::\n\n {\n \"data\": [\n {\n \"id\": 1,\n \"name\": \"\u5f20\u4e09\"\n },\n {\n \"id\": 2,\n \"name\": \"\u674e\u56db\"\n }\n ],\n \"code\": 200,\n \"msg\": \"OK\"\n }\n\n\n\u4e8c. ``rest_framework_app_api`` assumes you are using class-based views in Django\nRest Framework.\n\nif you use like ListAPIView in ``from rest_framework.generics import ListAPIView``, please replace with ``from rest_framework_app_api.generics import ListAPIView``.\n\n::\n\n from snippets.models import Snippet\n from snippets.serializers import SnippetSerializer\n from rest_framework_app_api import generics\n\n class SnippetList(generics.ListCreateAPIView):\n queryset = Snippet.objects.all()\n serializer_class = SnippetSerializer\n\n class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):\n queryset = Snippet.objects.all()\n serializer_class = SnippetSerializer\n\n\n1. if you use like ListModelMixin in ``from rest_framework.mixins import ListModelMixin``, please replace with ``from rest_framework_app_api.mixins import ListModelMixin``.\n\n::\n\n from snippets.models import Snippet\n from snippets.serializers import SnippetSerializer\n from rest_framework_app_api import mixins\n from rest_framework import generics\n\n class SnippetDetail(mixins.RetrieveModelMixin,\n mixins.UpdateModelMixin,\n mixins.DestroyModelMixin,\n generics.GenericAPIView):\n queryset = Snippet.objects.all()\n serializer_class = SnippetSerializer\n\n def get(self, request, *args, **kwargs):\n return self.retrieve(request, *args, **kwargs)\n\n def put(self, request, *args, **kwargs):\n return self.update(request, *args, **kwargs)\n\n def delete(self, request, *args, **kwargs):\n return self.destroy(request, *args, **kwargs)\n\n2. if you use like APIView in ``from rest_framework.views import APIView``, please replace with ``from rest_framework_app_api.views import APIView``.\n\n::\n\n from snippets.models import Snippet\n from snippets.serializers import SnippetSerializer\n from rest_framework_app_api.views import APIView\n from rest_framework_app_api.response import APIResponse\n from rest_framework import status\n\n class SnippetList(APIView):\n \"\"\"\n List all snippets, or create a new snippet.\n \"\"\"\n def get(self, request, format=None):\n snippets = Snippet.objects.all()\n serializer = SnippetSerializer(snippets, many=True)\n return APIResponse(serializer.data)\n\n def post(self, request, format=None):\n serializer = SnippetSerializer(data=request.data)\n if serializer.is_valid():\n serializer.save()\n return APIResponse(serializer.data)\n return APIResponse(serializer.errors)\n\n class SnippetDetail(APIView):\n \"\"\"\n Retrieve, update or delete a snippet instance.\n \"\"\"\n def get(self, request, pk, format=None):\n snippet = self.get_object(pk)\n serializer = SnippetSerializer(snippet)\n return APIResponse(serializer.data)\n\n def put(self, request, pk, format=None):\n snippet = self.get_object(pk)\n serializer = SnippetSerializer(snippet, data=request.data)\n if serializer.is_valid():\n serializer.save()\n return APIResponse(serializer.data)\n return APIResponse(serializer.errors, code=status.HTTP_400_BAD_REQUEST)\n\n def delete(self, request, pk, format=None):\n snippet = self.get_object(pk)\n snippet.delete()\n return APIResponse(code=status.HTTP_204_NO_CONTENT)\n\n3. if you use like ModelViewSet in ``from rest_framework.viewsets import ModelViewSet``, please replace with ``from rest_framework_app_api.viewsets import ModelViewSet``.\n\n::\n\n from snippets.models import Snippet\n from rest_framework_app_api import viewsets\n\n class SnippetViewSet(viewsets.ModelViewSet):\n queryset = Author.objects.all()\n serializer_class = AuthorSerializer\n\n4. if you use like Response in ``from rest_framework.response import Response``, please replace with ``from rest_framework_app_api.response import APIResponse``.\n\n\nSettings\n^^^^^^^^\n\nrest_framework setting\n\n::\n\n REST_FRAMEWORK = {\n 'PAGE_SIZE': 10,\n\n # rest_framework custom setting\n 'EXCEPTION_HANDLER': 'rest_framework_app_api.exceptions.exception_handler',\n 'DEFAULT_PAGINATION_CLASS': 'rest_framework_app_api.pagination.AppApiPageNumberPagination',\n }\n\nrest_framework_app_api setting\n\n::\n\n REST_FRAMEWORK_APPAPI = {\n # rest_framework_app_api code\n 'DEFAULT_APP_CODE_SUCCESS': 200, # default success code\n 'DEFAULT_APP_CODE_FAIL': 0, # default error code\n\n # rest_framework_app_api msg\n 'DEFAULT_APP_MSG_CREAT_SUCCESS': 'create success\uff01',\n 'DEFAULT_APP_MSG_UPDATE_SUCCESS': 'update success\uff01',\n 'DEFAULT_APP_MSG_DELETE_SUCCESS': 'delete success\uff01',\n 'DEFAULT_APP_MSG_SEARCH_SUCCESS': 'get data success\uff01',\n 'DEFAULT_APP_MSG_SEARCH_NODATA': 'no data\uff01',\n 'DEFAULT_APP_MSG_UNNONE': 'unknown error\uff01',\n }\n\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/allran/djangorestframework-appapi", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "djangorestframework-appapi", "package_url": "https://pypi.org/project/djangorestframework-appapi/", "platform": "", "project_url": "https://pypi.org/project/djangorestframework-appapi/", "project_urls": { "Homepage": "https://github.com/allran/djangorestframework-appapi" }, "release_url": "https://pypi.org/project/djangorestframework-appapi/0.0.3/", "requires_dist": [ "djangorestframework (>=3.10)", "django (>=1.11)" ], "requires_python": ">=3.5", "summary": "A Django REST framework API adapter for the App(IOS, Andorid, WebApp) API spec.", "version": "0.0.3" }, "last_serial": 5981933, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "bbd4e77d0efc627aacb3e96a94131ac2", "sha256": "cd0afd6cb4f1d84aa33d98bba46a37052d8fcdd0e1649930625f2ac43c6a10dc" }, "downloads": -1, "filename": "djangorestframework_appapi-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bbd4e77d0efc627aacb3e96a94131ac2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 8920, "upload_time": "2019-10-14T06:10:09", "url": "https://files.pythonhosted.org/packages/a2/18/a2faca3cc34aed594f2173a3750c8382789537768d26c90daeb8f91b13dd/djangorestframework_appapi-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8683d002ef4643f0e41f2d774ae6f9cc", "sha256": "b303f367d3ed1743350ea8a6bafb36032917d0ce7ba9ec1d3a39b14a21787174" }, "downloads": -1, "filename": "djangorestframework-appapi-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8683d002ef4643f0e41f2d774ae6f9cc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 9788, "upload_time": "2019-10-14T06:10:13", "url": "https://files.pythonhosted.org/packages/9e/d2/70a0f0881ee5f48a5f19dac2f4a4415c03799bcbe5ad20b9c13c58b44264/djangorestframework-appapi-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9f814f25052c4fc18710838d222fad71", "sha256": "7947fee743e6245ea9c6f53cf7fab65ecb1c67822645cfbdae59f01a5d317173" }, "downloads": -1, "filename": "djangorestframework_appapi-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f814f25052c4fc18710838d222fad71", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 11615, "upload_time": "2019-10-15T06:21:32", "url": "https://files.pythonhosted.org/packages/75/6a/309bce8a365745fd4dfb5a9e9d71f035aeaa957bc649464a5051ed4a532e/djangorestframework_appapi-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff1b882d6b94caac6033af066febac67", "sha256": "3ccd18e45652f803ed498b7cc3cb661a1942caacc54acdbefadaa8cb4d7afd2c" }, "downloads": -1, "filename": "djangorestframework-appapi-0.0.2.tar.gz", "has_sig": false, "md5_digest": "ff1b882d6b94caac6033af066febac67", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 12881, "upload_time": "2019-10-15T06:21:34", "url": "https://files.pythonhosted.org/packages/66/92/9ae4a1fca97494b8a60d20baa35a8d5e6e5fa8f973df94c0b64b082faeda/djangorestframework-appapi-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "a8fa05a2bd056935b5be0cd2f3ac50b9", "sha256": "64df835b0902d51219613e5dcdb1ea4fae7b521993c7860781ab03d061108db8" }, "downloads": -1, "filename": "djangorestframework_appapi-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a8fa05a2bd056935b5be0cd2f3ac50b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 12629, "upload_time": "2019-10-16T08:21:59", "url": "https://files.pythonhosted.org/packages/bc/1b/e108a18a1be1c2a8bae9186d16598ca5f8339badaecbf81c3ddbcdcd1947/djangorestframework_appapi-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31e647dfe6886e79f3e3810773d5189a", "sha256": "0ddba0be8a0857233c79efc6778cbc637f17f267d526482cd8721374d8ba9d41" }, "downloads": -1, "filename": "djangorestframework-appapi-0.0.3.tar.gz", "has_sig": false, "md5_digest": "31e647dfe6886e79f3e3810773d5189a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 24797, "upload_time": "2019-10-16T08:22:01", "url": "https://files.pythonhosted.org/packages/6f/63/e8ef341e0f3226999511cd6d6d5869c4683adb9105941cb7838b9e8a34a7/djangorestframework-appapi-0.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a8fa05a2bd056935b5be0cd2f3ac50b9", "sha256": "64df835b0902d51219613e5dcdb1ea4fae7b521993c7860781ab03d061108db8" }, "downloads": -1, "filename": "djangorestframework_appapi-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a8fa05a2bd056935b5be0cd2f3ac50b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 12629, "upload_time": "2019-10-16T08:21:59", "url": "https://files.pythonhosted.org/packages/bc/1b/e108a18a1be1c2a8bae9186d16598ca5f8339badaecbf81c3ddbcdcd1947/djangorestframework_appapi-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31e647dfe6886e79f3e3810773d5189a", "sha256": "0ddba0be8a0857233c79efc6778cbc637f17f267d526482cd8721374d8ba9d41" }, "downloads": -1, "filename": "djangorestframework-appapi-0.0.3.tar.gz", "has_sig": false, "md5_digest": "31e647dfe6886e79f3e3810773d5189a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 24797, "upload_time": "2019-10-16T08:22:01", "url": "https://files.pythonhosted.org/packages/6f/63/e8ef341e0f3226999511cd6d6d5869c4683adb9105941cb7838b9e8a34a7/djangorestframework-appapi-0.0.3.tar.gz" } ] }