Metadata-Version: 2.1
Name: djangorestframework-appapi
Version: 0.0.3
Summary: A Django REST framework API adapter for the App(IOS, Andorid, WebApp) API spec.
Home-page: https://github.com/allran/djangorestframework-appapi
Author: Allran.Qu
Author-email: 
License: BSD
Description: IOS&Andorid API and Django Rest Framework
        
        --------
        Overview
        --------
        
        **App API support for Django REST Framework**
        
        * Documentation: None
        * Format specification: http://jsonapi.org/format/
        
        
        1. By default, Django REST Framework will produce a request like::
        
            http://example.com/api/1.0/identities/?page=1
        
        and then the response like::
        
            {
                "count": 200,
                "msg": "success!",
                "data": {
                    "list": [
                        {
                            "id": 3,
                            "username": "john1",
                            "full_name": "John Coltrane1"
                        },
                         {
                            "id": 4,
                            "username": "john2",
                            "full_name": "John Coltrane2"
                        },
                    ],
                    "total_count": 2,
                    "total_pages": 1
                }
            }
        
        2. if you want get object info, you will produce a request like:
            http://example.com/api/1.0/identities/1/
        
        and then the response like:
        
        ::
        
            {
                "count": 200,
                "msg": "success!",
                "data": {
                    "id": 1,
                    "username": "john2",
                    "full_name": "John Coltrane2"
                }
            }
        
        
        -----
        Goals
        -----
        
        As a Django REST Framework APP API (short DJA) we are trying to address following goals:
        
        1. Support the `REST_FRAMEWORK_APPAPI` to compliance
        
        2. Be as compatible with `Django REST Framework`_ as possible
        
        3. Have sane defaults to be as easy to pick up as possible
        
        4. Be solid and tested with good coverage
        
        5. Be performant
        
        .. _JSON API: http://jsonapi.org
        .. _Django REST Framework: https://www.django-rest-framework.org/
        
        ------------
        Requirements
        ------------
        
        1. Python (3.5, 3.6, 3.7)
        2. Django (1.11, 2.1, 2.2)
        3. Django REST Framework (3.10)
        
        We **highly** recommend and only officially support the latest patch release of each Python, Django and REST Framework series.
        
        ------------
        Installation
        ------------
        
        From PyPI
        ^^^^^^^^^
        
        ::
        
            $ pip install djangorestframework-appapi
        
        From Source
        ^^^^^^^^^^^
        
        ::
        
            $ git clone https://github.com/allran/djangorestframework-appapi.git
            $ cd django-rest-framework-app-api
            $ pip install -e .
        
        
        Running the example app
        ^^^^^^^^^^^^^^^^^^^^^^^
        
        It is recommended to create a virtualenv for testing. Assuming it is already
        installed and activated:
        
        ::
        
            $ git clone https://github.com/allran/djangorestframework-appapi.git
            $ cd django-rest-framework-app-api
            $ pip install -U -e . -r requirements.txt
            $ django-admin migrate --settings=example_project.settings
            $ django-admin loaddata drf_example --settings=example_project.settings
            $ django-admin runserver --settings=example_project.settings
        
        Browse to http://localhost:8000
        
        
        Running Tests and linting
        ^^^^^^^^^^^^^^^^^^^^^^^^^
        
        It is recommended to create a virtualenv for testing. Assuming it is already
        installed and activated:
        
        ::
        
            $ pip install -Ur requirements.txt
            $ flake8
            $ pytest
        
        -----
        Usage
        -----
        
        一. ``rest_framework_app_api`` assumes you are using class-based renderers in Django
        Rest Framework.
        
        ::
        
            REST_FRAMEWORK = {
                'DEFAULT_RENDERER_CLASSES': (
                    'rest_framework_app_api.renderers.JSONRenderer',
                ),
            }
        
        then you can get the app response data
        
        ::
        
            {
                "data": [
                    {
                        "id": 1,
                        "name": "张三"
                    },
                    {
                        "id": 2,
                        "name": "李四"
                    }
                ],
                "code": 200,
                "msg": "OK"
            }
        
        
        二. ``rest_framework_app_api`` assumes you are using class-based views in Django
        Rest Framework.
        
        if you use like ListAPIView in ``from rest_framework.generics import ListAPIView``, please replace with ``from rest_framework_app_api.generics import ListAPIView``.
        
        ::
        
            from snippets.models import Snippet
            from snippets.serializers import SnippetSerializer
            from rest_framework_app_api import generics
        
            class SnippetList(generics.ListCreateAPIView):
                queryset = Snippet.objects.all()
                serializer_class = SnippetSerializer
        
            class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
                queryset = Snippet.objects.all()
                serializer_class = SnippetSerializer
        
        
        1. if you use like ListModelMixin in ``from rest_framework.mixins import ListModelMixin``, please replace with ``from rest_framework_app_api.mixins import ListModelMixin``.
        
        ::
        
            from snippets.models import Snippet
            from snippets.serializers import SnippetSerializer
            from rest_framework_app_api import mixins
            from rest_framework import generics
        
            class SnippetDetail(mixins.RetrieveModelMixin,
                                mixins.UpdateModelMixin,
                                mixins.DestroyModelMixin,
                                generics.GenericAPIView):
                queryset = Snippet.objects.all()
                serializer_class = SnippetSerializer
        
                def get(self, request, *args, **kwargs):
                    return self.retrieve(request, *args, **kwargs)
        
                def put(self, request, *args, **kwargs):
                    return self.update(request, *args, **kwargs)
        
                def delete(self, request, *args, **kwargs):
                    return self.destroy(request, *args, **kwargs)
        
        2. if you use like APIView in ``from rest_framework.views import APIView``, please replace with ``from rest_framework_app_api.views import APIView``.
        
        ::
        
            from snippets.models import Snippet
            from snippets.serializers import SnippetSerializer
            from rest_framework_app_api.views import APIView
            from rest_framework_app_api.response import APIResponse
            from rest_framework import status
        
            class SnippetList(APIView):
                """
                List all snippets, or create a new snippet.
                """
                def get(self, request, format=None):
                    snippets = Snippet.objects.all()
                    serializer = SnippetSerializer(snippets, many=True)
                    return APIResponse(serializer.data)
        
                def post(self, request, format=None):
                    serializer = SnippetSerializer(data=request.data)
                    if serializer.is_valid():
                        serializer.save()
                        return APIResponse(serializer.data)
                    return APIResponse(serializer.errors)
        
            class SnippetDetail(APIView):
                """
                Retrieve, update or delete a snippet instance.
                """
                def get(self, request, pk, format=None):
                    snippet = self.get_object(pk)
                    serializer = SnippetSerializer(snippet)
                    return APIResponse(serializer.data)
        
                def put(self, request, pk, format=None):
                    snippet = self.get_object(pk)
                    serializer = SnippetSerializer(snippet, data=request.data)
                    if serializer.is_valid():
                        serializer.save()
                        return APIResponse(serializer.data)
                    return APIResponse(serializer.errors, code=status.HTTP_400_BAD_REQUEST)
        
                def delete(self, request, pk, format=None):
                    snippet = self.get_object(pk)
                    snippet.delete()
                    return APIResponse(code=status.HTTP_204_NO_CONTENT)
        
        3. if you use like ModelViewSet in ``from rest_framework.viewsets import ModelViewSet``, please replace with ``from rest_framework_app_api.viewsets import ModelViewSet``.
        
        ::
        
            from snippets.models import Snippet
            from rest_framework_app_api import viewsets
        
            class SnippetViewSet(viewsets.ModelViewSet):
                queryset = Author.objects.all()
                serializer_class = AuthorSerializer
        
        4. if you use like Response in ``from rest_framework.response import Response``, please replace with ``from rest_framework_app_api.response import APIResponse``.
        
        
        Settings
        ^^^^^^^^
        
        rest_framework setting
        
        ::
        
            REST_FRAMEWORK = {
                'PAGE_SIZE': 10,
        
                # rest_framework custom setting
                'EXCEPTION_HANDLER': 'rest_framework_app_api.exceptions.exception_handler',
                'DEFAULT_PAGINATION_CLASS': 'rest_framework_app_api.pagination.AppApiPageNumberPagination',
            }
        
        rest_framework_app_api setting
        
        ::
        
            REST_FRAMEWORK_APPAPI = {
                # rest_framework_app_api code
                'DEFAULT_APP_CODE_SUCCESS': 200,  # default success code
                'DEFAULT_APP_CODE_FAIL': 0,  # default error code
        
                # rest_framework_app_api msg
                'DEFAULT_APP_MSG_CREAT_SUCCESS': 'create success！',
                'DEFAULT_APP_MSG_UPDATE_SUCCESS': 'update success！',
                'DEFAULT_APP_MSG_DELETE_SUCCESS': 'delete success！',
                'DEFAULT_APP_MSG_SEARCH_SUCCESS': 'get data success！',
                'DEFAULT_APP_MSG_SEARCH_NODATA': 'no data！',
                'DEFAULT_APP_MSG_UNNONE': 'unknown error！',
            }
        
        
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.5
Description-Content-Type: text/x-rst
