{"id":18301818,"url":"https://github.com/guicamargo19/fullstack_rest_api_templates","last_synced_at":"2026-04-12T01:35:16.069Z","repository":{"id":241828926,"uuid":"806780079","full_name":"guicamargo19/fullstack_rest_api_templates","owner":"guicamargo19","description":"REST API em Django com Python com Django Templates.","archived":false,"fork":false,"pushed_at":"2024-06-14T17:25:17.000Z","size":38,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-15T04:18:54.978Z","etag":null,"topics":["css","django","django-rest-framework","django-templates","docker","docker-compose","html","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guicamargo19.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-27T22:19:09.000Z","updated_at":"2025-01-07T20:55:27.000Z","dependencies_parsed_at":"2024-05-31T15:38:45.407Z","dependency_job_id":null,"html_url":"https://github.com/guicamargo19/fullstack_rest_api_templates","commit_stats":null,"previous_names":["guicamargo19/fullstack_rest_api_templates"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guicamargo19%2Ffullstack_rest_api_templates","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guicamargo19%2Ffullstack_rest_api_templates/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guicamargo19%2Ffullstack_rest_api_templates/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guicamargo19%2Ffullstack_rest_api_templates/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guicamargo19","download_url":"https://codeload.github.com/guicamargo19/fullstack_rest_api_templates/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248017976,"owners_count":21034042,"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":["css","django","django-rest-framework","django-templates","docker","docker-compose","html","python"],"created_at":"2024-11-05T15:17:03.523Z","updated_at":"2025-10-19T23:47:36.135Z","avatar_url":"https://github.com/guicamargo19.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# REST API Operações CRUD com Django Templates\n\n## Apresentação do projeto\n\nhttps://github.com/guicamargo19/fullstack_rest_api_templates/assets/133445061/80a6221e-6859-4e73-98b6-08e026501264\n\nO projeto viabiliza a criação de um usuário com a integral preservação de todos os seus dados. Através de uma\ninterface Front-end simples, minimalista e intuitiva, construída com **Django Templates**, são executáveis operações CRUD (Create, Read, Update, Delete).\n\nO Back-end, elaborado em **Django** com **Python**, incorpora a REST API mediante o **Django Rest Framework**, e o armazenamento de dados\né efetuado utilizando o **PostgreSQL**.\n\n## Sumário\n\n- [Instalação](#instalacao)\n- [Rodando o projeto](#rodando-o-projeto)\n- [Contribuindo](#configuracao-desenvolvimento)\n- [Ferramentas utilizadas](#ferramentas)\n- [Sobre](#sobre)\n    - [Back-end](#backend)\n    - [Front-end](#frontend)\n    - [Banco de dados](#banco-de-dados)\n    - [Docker](#docker)\n\n\n\u003cdiv id=\"instalacao\"\u003e\n\n## Instalação\n\nSiga estes passos para instalar e configurar o ambiente necessário para rodar o projeto em sua máquina local.\n\n### Pré-requisitos\n\nAntes de iniciar, você precisará ter instalado em sua máquina as seguintes ferramentas:\n\n- [Git](https://git-scm.com)\n- [Docker](https://docker.com/)\n- [Docker Compose](https://docs.docker.com/compose/install/)\n\n### Clonando o Repositório\n\nSiga as etapas a seguir para configurar o ambiente de desenvolvimento:\n\n- Clone este repositório em sua máquina local.\n```bash\ngit clone https://github.com/guicamargo19/fullstack_rest_api_templates.git\n```\n\u003c/div\u003e\n\u003cdiv id=\"rodando-o-projeto\"\u003e\n\n## Rodando o projeto no Docker\n\n1. Na raiz do projeto, crie o arquivo \".env\" a partir do \".env-example\". \n\n2. Execute o comando a seguir e certifique-se de que o Docker Desktop está aberto.\n```shell\ndocker-compose up --build\n```\n\u003c/div\u003e\n\u003cdiv id=\"configuracao-desenvolvimento\"\u003e\n\n## Contribuindo\n\n1. Navegue até o diretório clonado\n```shell\ncd fullstack_rest_api_templates\n```\n2. Crie e ative o ambiente virtual,(comandos podem variar entre Windows, Linux e Mac.)\n```shell\npython -m venv venv\nsource venv/bin/activate\n```\nApós a ativação do ambiente virtual, selecione o interpretador correto para ele, digitando na barra superior \nde pesquisa do VSCode: **\u003ePython Select Interpreter**\n\n3. Execute o seguinte comando para instalar as dependências:\n```shell\npip install -r requirements.txt\n```\n\n## Dotenv file (.env)\n\nNa raiz do projeto é possível encontrar o arquivo \".env_example\", sendo que, a partir dele, deve-se criar o\narquivo \".env\" que deve ser preenchido com variáveis de ambiente com configurações necessárias para o banco\nde dados PostgreSQL. Certifique-se de criar este arquivo no mesmo local do exemplo.\n\n## Testes\n\nForam implementados testes para verificar a integridade do Model, das Views e do\nSerializer neste projeto. Também foi utilizado DRF (APITestCase) para simplificar e criar testes \npara verificar se as operações CRUD estão funcionando como esperado.\n\nExecutando os testes dentro do Docker:\n```shell\ndocker-compose run --rm web python manage.py test\n```\n\n\u003c/div\u003e\n\u003cdiv id=\"ferramentas\"\u003e\n\n## 🛠️ Ferramentas utilizadas para construção do projeto\n\n* **Python** - Linguagem de programação de alto nível, interpretada de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte.\n* **Django** - Framework para desenvolvimento rápido para web, escrito em Python, que utiliza o padrão model-template-view.\n* **Django Rest Framework** - Biblioteca que permite a construção de APIs REST utilizando a estrutura do Django.\n* **HTML** - Linguagem de marcação utilizada na construção de páginas na Web.\n* **CSS** - Cascading Style Sheets é um mecanismo para adicionar estilos a uma página web.\n* **PostgreSQL** - Um sistema gerenciador de banco de dados objeto relacional, desenvolvido como projeto de código aberto.\n* **Docker** - Conjunto de produtos de PaaS que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres.\n\n\u003c/div\u003e\n\u003cdiv id=\"sobre\"\u003e\n\n## Sobre\n\u003cdiv id=\"backend\"\u003e\n\n## 1. Back-End (Django com Python)\n\nBack-end desenvolvido em **Django** com **Python** e construção da Rest API com **DRF (Django Rest Framework)**, \nque mantém os dados da Entidade Usuário. Ele provém toda a manutenção (CRUD) dessa entidade. \n\nO modelo da entidade usuário possui quatro campos (nickname, fullname, email e age), sendo o \"nickname\" e \"name\" um campo\ndo tipo CharField, o campo \"email\" do tipo EmailField e o \"age\" sendo um campo tipo PositiveIntegerField, sendo que os\ncampos \"nickname\" e \"email\" não podem ser repetidos na base de dados.\n\nProjeto está na raiz, onde se encontra-se o app api_rest, assim como a pasta api_root onde se localizam os arquivos como\nsettings.py e wsgi.py. No App api_rest é onde estão localizados o Model, as Views utilizando CBV (Class Based Views), os Serializers e os Testes.\n\nO Back-End é hospedado na porta 8000: [http://localhost:8000/api/api_rest/](http://localhost:8000/api/api_rest/)\n\n## API\n\n### API Endpoint: Listar usuários\n**GET /api/api_rest/**\n\nRetorna uma lista de todos os usuários existentes.\n\n#### Resposta\n```\nHTTP 200 OK\nContent-Type: application/json\n\n[\n    {\n        \"id\": 1,\n        \"nickname\": \"patricio\",\n        \"name\": \"Patricio de Souza\",\n        \"email\": \"patricio@gmail.com\",\n        \"age\": 45\n    },\n    {\n        \"id\": 2,\n        \"nickname\": \"antonio\",\n        \"name\": \"Antonio Carlos da Silva\",\n        \"email\": \"antonio@email.com\",\n        \"age\": 56\n    }\n]\n```\n-------------------------------------\n## API Endpoint: Criar um usuário\n\n**POST /api/api_rest/**\n\nCria um usuário\n\n#### Resposta\n```\nHTTP 201 OK\nContent-Type: application/json\n```\n-------------------------------------\n## API Endpoint: Atualiza um usuário\n\n**PATCH /api/produtos/${productID}**\n\nAtualiza o usuário solicitado\n\n#### Resposta\n```\nHTTP 200 OK\nContent-Type: application/json\n```\n-------------------------------------\n## API Endpoint: Deletar um usuário\n\n**DELETE /api/api_rest/${userID}**\n\nApaga o usuário solicitado\n\n#### Resposta\n```\nHTTP 204 OK\nContent-Type: application/json\n```\n-------------------------------------\n## API Endpoint: Deletar todos os usuários\n\n**DETELE /api/api_rest/**\n\nApaga todos os usuários\n\n#### Resposta\n```\nHTTP 204 OK\nContent-Type: application/json\n```\n\n\u003cdiv id=\"frontend\"\u003e\n\n## 2. Front-End (Django Templates)\n\nO Front-end do projeto foi realizado em Django Templates consumindo os dados da API através do contexto passado\npara as CBVs na renderização dos templates.\n\nO Front-End é hospedado na porta 8000: [http://localhost:8000/api/](http://localhost:8000/api/)\n\n\u003c/div\u003e\n\u003cdiv id=\"banco-de-dados\"\u003e\n\n## 3. Banco de Dados (PostgreSQL)\n\nO banco de dados **PostgreSQL** é estruturado de forma simples, composto apenas por uma tabela, a qual abriga os dados dos usuários.\n\nApós a definição dos modelos no Django, é imperativo criar as migrações correspondentes para aplicar as alterações no banco de dados.\nIsso é realizado através do comando **\"python manage.py makemigrations\"**.\n\nUma vez que as migrações tenham sido criadas, é necessário aplicá-las utilizando o comando **\"python manage.py migrate\"**.\nEsta operação executa todas as migrações pendentes e atualiza o esquema do banco de dados de acordo com as definições do modelo.\n\nO DB-Server é hospedado na porta padrão 5432 do PostgreSQL.\n\n\u003c/div\u003e\n\u003cdiv id=\"docker\"\u003e\n\n## 4. Docker e Docker Compose\n\nO arquivo \"docker-compose.yml\" é responsável por definir dois serviços distintos: 'db-server' e o 'web',\ncada um com suas próprias configurações e dependências.\n\n- Utiliza-se a imagem 'postgres:latest' disponível no Docker Hub, que é uma imagem pré-configurada do PostgreSQL.\n- O ambiente é configurado com os dados necessários, como o nome do banco de dados, usuário e senha, os quais foram previamente especificados no arquivo \".env\".\n- A seção \"volumes\" mapeia um diretório de dados do PostgreSQL, garantindo a persistência dos dados entre reinicializações do contêiner.\n- Na seção \"network\", é definida a rede: 'django_network'. A rede é utilizadas para separar a comunicação entre os serviços, simplificando a interação entre os contêineres.\n- Na seção entrypoint é adicionado o script de inicialização [\"/code/entrypoint.sh\"] com os comandos aguardando o banco de dados ser montado e migração dos models.\n\n\u003c/div\u003e\n\u003c/div\u003e\n\n## ✒️ Autor\n\nGuilherme Ferreira Camargo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguicamargo19%2Ffullstack_rest_api_templates","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguicamargo19%2Ffullstack_rest_api_templates","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguicamargo19%2Ffullstack_rest_api_templates/lists"}