{"id":17093830,"url":"https://github.com/rhenter/django-api-client","last_synced_at":"2025-04-12T22:51:14.241Z","repository":{"id":41871457,"uuid":"282430770","full_name":"rhenter/django-api-client","owner":"rhenter","description":"The Django API Client is an API response wrapper, which translates Django's native calls when using a view to a particular REST API. Whether using the API client directly in a FBV (Function-based View) or using CBV (Class-based View), this library makes this communication as transparent and easy as possible","archived":false,"fork":false,"pushed_at":"2022-04-25T14:23:01.000Z","size":8022,"stargazers_count":18,"open_issues_count":1,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-09T21:43:57.857Z","etag":null,"topics":["api","client","django","python","rest","rest-api","restframework"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rhenter.png","metadata":{"files":{"readme":"README.pt.rst","changelog":"CHANGES.rst","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-25T11:32:20.000Z","updated_at":"2023-10-12T22:08:33.000Z","dependencies_parsed_at":"2022-08-11T19:50:37.536Z","dependency_job_id":null,"html_url":"https://github.com/rhenter/django-api-client","commit_stats":null,"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhenter%2Fdjango-api-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhenter%2Fdjango-api-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhenter%2Fdjango-api-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rhenter%2Fdjango-api-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rhenter","download_url":"https://codeload.github.com/rhenter/django-api-client/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248643043,"owners_count":21138353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","client","django","python","rest","rest-api","restframework"],"created_at":"2024-10-14T14:08:26.975Z","updated_at":"2025-04-12T22:51:14.208Z","avatar_url":"https://github.com/rhenter.png","language":"Python","readme":"=================\nDjango API Client\n=================\n\n|PyPI latest| |PyPI Version| |PyPI License|  |CicleCI Status| |Coverage| |Docs| |Open Source? Yes!|\n\nO Django API Client é um wrapper de resposta da API, que traduz as chamadas nativas do Django ao usar uma view para a uma determinada API REST. Seja usando do cliente da API diretamente em um FBV (Function-based View) ou usando CBV (Class-based View), essa biblioteca tornar essa comunicação o mais transparente e fácil o possível\n\n\nAlguns motivos para se usar o **Django API Client**\n\n* Se você trabalha com microsserviços com APIs em vários locais e deseja continuar usando o Django como um WebApp com os mesmos recursos para renderizar os dados como se estivesse usando os modelos nativos\n\n* Você quer separar o seu projeto Django para deixar um deles somente com a API com DRF e outro como um WebApp com Templates(HTML), CSS, JS ao invés de usar algum frontend JS (ReactJS, AngularJS, etc)\n\n* Você deseja usar uma API de terceiros para listar, criar e alterar usando o sistema de templates do django\n\n\nPara mais informações, veja nossa documentação em `Github Pages \u003chttps://rhenter.github.io/django-api-client/\u003e`_\n\nDependências\n============\n\n- Python 3.x\n- Django 2.0 or later\n\n\nComo instalar\n=============\n\nVocê pode instalar usando **pip**:\n\n.. code:: shell\n\n    $ pip install django-api-client\n\nSe preferir, você pode baixar o codigo no Repositório do GitHub e rodar o setup.py\n\n.. code:: shell\n\n    $ git clone git@github.com:rhenter/django_api_client.git\n    $ cd django_api_client\n    $ python setup.py install\n\n\nConfigurando\n============\n\nPara habilitar o `django_api_client` você precisa adiciona-lo ao `INSTALLED_APPS` no arquivo settings.py do seu projeto:\n\n.. code-block:: python\n\n    INSTALLED_APPS = (\n        ...\n        'django_api_client',\n        ...\n    )\n\n\nExemplo\n=======\n\n- Adicione tambem ao settings.py a configuração para acessar sua API:\n\n.. code-block:: python\n\n    DJANGO_API_CLIENT = {\n      'API': [\n        {\n            'NAME': 'production',\n            'BASE_URL': 'https://example.com',\n            'ENDPOINTS': [\n                '/v1/order/orders',\n                '/v1/user/users',\n                ...\n            ],\n            'AUTHENTICATION_ACCESS_TOKEN': 'TOKEN'\n        },\n        {\n            'NAME': 'localhost',\n            'BASE_URL': 'http://localhost:8001',\n            'ENDPOINTS': [\n                '/v1/order/orders',\n                '/v1/user/users',\n                ...\n            ],\n            'AUTHENTICATION_ACCESS_TOKEN': 'TOKEN'\n        }\n      ]\n    }\n\n.. note::\n  Os detalhes de configuração serão explicados na documentação*\n\n* Crie um arquivo clients.py em alguma pasta nucleo do seu projeto, caso não tenha, crie dentro da sua pasta do projeto para ficar mais simples de ser importado de qualquer lugar do projeto com o seguinte conteúdo:\n\n.. code-block:: python\n\n  from django_api_client.client import api_client_factory\n\n  api_client = api_client_factory('production')\n\n\n.. note::\n  - O nome desta variável será o nome nome do cliente que você usará em todo o seu projeto\n  - Recomendo para produção usar uma env var setada no settings.py para você poder alterar de maneira simples o nome da API sem a necessidade de criar varios.\n  - No nosso caso, temos a opção de \"production\" e \"localhost\", o factory gerará o cliente de acordo com o nome utilizado e os parametros descritos nele\n\n* Agora vamos listar os dados usando o sistema de templates normal do Django\n\nVamos imaginar que o cliente esta na pasta de projeto (pasta que contem o arquivo settings.py)\n\n.. code-block:: python\n\n  from django_api_client.mixins import ClientAPIListMixin\n\n  from pasta_do_projeto.clients import api_client\n\n\n  class OrderListView(ClientAPIListMixin):\n      template_name = \"template_name.html\"        # Caminho do seu template HTML\n      page_title = 'Orders'                       # Gera uma variavel de contexto para usar no seu template\n      page_base_url = reverse_lazy('order:list')  # Informação usada na paginação e na busca\n      paginate_by = 50                            # Número de items para gerar a paginação\n      client_method = api_client.order.orders.list\n\n\n.. note::\n  O cliente gerará para cada endpoint a toda uma estrutura amigável para o usuário.\n\n\nNo seu template você pode usar os includes (snippets) de formularios e paginação. Ex:\n\n\n.. code-block:: jinja\n\n    {% content %}\n\n    ...\n    \u003cdiv class=\"card card-navy card-outline\"\u003e\n      \u003cdiv class=\"card-header\"\u003e\n        \u003ch3 class=\"card-title\"\u003e\n          {% trans \"Order List\" %} : \u003csmall class=\"text-muted\"\u003e{{ paginator.count }}\u003c/small\u003e\n        \u003c/h3\u003e\n        {% include \"includes/form_paginate_by.html\" with paginate_by=paginate_by range_pagination=range_pagination %}\n        {% include \"includes/form_search.html\" with search=search %}\n      \u003c/div\u003e\n      \u003cdiv class=\"card-body table-responsive p-0\"\u003e\n        \u003ctable class=\"table table-bordered table-hover table-striped\" id=\"list-content\"\u003e\n          \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth\u003e{% trans 'Code' %}\u003c/th\u003e\n            \u003cth\u003e{% trans 'Customer' %}\u003c/th\u003e\n            \u003cth\u003e{% trans 'Product' %}\u003c/th\u003e\n          \u003c/tr\u003e\n          \u003c/thead\u003e\n          \u003ctbody class=\"text-gray\"\u003e\n          {% for order in object_list %}\n            \u003ctr\u003e\n              \u003ctd\u003e\u003ca href=\"{% url 'order:detail' pk=order.id %}\" \u003c/a\u003e\n              \u003c/td\u003e\n              \u003ctd\u003e{{ order.id }}\u003c/td\u003e\n              \u003ctd\u003e{{ order.customer.name|title }}\u003c/td\u003e\n              \u003ctd\u003e{{ order.product.name|title }}\u003c/td\u003e\n            \u003c/tr\u003e\n            {% endfor %}\n          {% endif %}\n          \u003c/tbody\u003e\n        \u003c/table\u003e\n      \u003c/div\u003e\n      \u003cdiv class=\"card-footer\"\u003e\n        {% if object_list|length != 0 or not object_list %}\n          {% include \"includes/list_paginator.html\" with page_obj=page_obj paginator=paginator %}\n        {% endif %}\n      \u003c/div\u003e\n    \u003c/div\u003e\n\n\n.. note::\n  - Exemplo using estilos (styles) do Bootstrap\n  - includes/form_search.html: Form com input de busca. Este include suporta placeholder também.\n  - includes/form_paginate_by.html: Form com select para escolher por quantos elementos a pagina será paginada. Ex: (20, 40, 60, etc ...)\n  - includes/list_paginator.html: Bloco com os elementos de paginação com os botões dos número de paginas, anterior e próximo\n\n\n\nExemplo com o endpoint **/order/orders/**:\n\n.. code-block:: text\n\n    nome do endpoint: order\n    métodos:\n        get_orders   # GET: Listar\n        get_order    # GET: Detalhe de um recurso usando um identificador\n        create_order # POST: Cria um registro de um recurso\n        update_order # PUT/PATCH: Atualiza total ou parciamente um recurso usando um identificador\n\n.. hint::\n\n    O que isso quer dizer?\n      Que o API Cliente sempre gerará a estutura de acordo os nomes dos seus endpoints\n\nDocumentação\n============\n\nVerifique a ultima versão da documentação do ``django-api-client`` em `Github Pages \u003chttps://rhenter.github.io/django-api-client/\u003e`_\n\n\nQuer contribuir?\n================\n\nPor favor envie seus Pull Requests, eles serão muito apreciados.\n\n\n1. Faça o Fork do `repositorio \u003chttps://github.com/rhenter/django_api_client\u003e`_ no GitHub.\n2. Crie uma branch fora da master e commit suas alterações.\n3. Instale os dependências. ``pip install -r requirements-dev.txt``\n4. Instale o pre-commit. ``pre-commit install``\n5. Rode os tests com ``cd test-django-project; py.test -vv -s``\n6. Crie um Pull Request com a sua contribuição\n\n\n.. |Docs| image:: https://img.shields.io/static/v1?label=DOC\u0026message=GitHub%20Pages\u0026color=%3CCOLOR%3E\n   :target: https://rhenter.github.io/django-api-client/\n.. |PyPI Version| image:: https://img.shields.io/pypi/pyversions/django-api-client.svg?maxAge=60\n   :target: https://pypi.python.org/pypi/django-api-client\n.. |PyPI License| image:: https://img.shields.io/pypi/l/django-api-client.svg?maxAge=120\n   :target: https://github.com/rhenter/django-api-client/blob/master/LICENSE\n.. |PyPI latest| image:: https://img.shields.io/pypi/v/django-api-client.svg?maxAge=120\n   :target: https://pypi.python.org/pypi/django-api-client\n.. |CicleCI Status| image:: https://circleci.com/gh/rhenter/django-api-client.svg?style=svg\n   :target: https://circleci.com/gh/rhenter/django-api-client\n.. |Coverage| image:: https://codecov.io/gh/rhenter/django-api-client/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/rhenter/django-api-client\n.. |Open Source? Yes!| image:: https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github\n   :target: https://github.com/rhenter/django-api-client","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhenter%2Fdjango-api-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhenter%2Fdjango-api-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhenter%2Fdjango-api-client/lists"}