lucasdmarten / navedexAPI

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Navedex Api

Sistema desenvolvido para o teste proposto pela empresa Nave.

💻 Proposta

Pelo que sei existem poucos desenvolvedores que utilizam o Python como sua stack na Nave. Pensando nisso estou elaborando outro projeto com a mesma proposta de teste que utilizei neste, porém dessa vez utilizando outras tecnologias que também gostaria de enviar para vocês. As ferramentas utilizadas no projeto próximo sistema são:

💻 Sobre o projeto

O sistema possui mecanismo de autenticação por email e senha que da acesso ao token individual de cada usuario cadastrado. Após o registro a api dará o acesso aos dados de Navers e Projetos onde é possível criar, listar, alterar e deletar cada objeto do banco de dados

🔨 Tecnologias

As seguintes ferramentas foram usadas na construção do projeto:

Como configurar o banco de dados MySQL:

# Para instalar MySQL no Ubuntu
$ sudo apt install mysql-server
# Instalar MySQL Database Connector
$ sudo apt install python3-dev
$ sudo apt install python3-dev libmysqlclient-dev default-libmysqlclient-dev
# Acessar terminal mysql
$ sudo mysql -u root
# Criar base de dados
mysql> CREATE DATABASE navedexAPI;
# Criar usuario
mysql> CREATE USER 'djangouser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
# Garantir acesso ao usuario
mysql> GRANT ALL ON navedexAPI.* TO 'djangouser'@'%';
mysql> FLUSH PRIVILEGES;

Conectar MySQL ao Django:

# Editar DATABASES no settings.py
$ nano ./root/settings.py

   ...
   # Database
   # https://docs.djangoproject.com/en/3.0/ref/settings/#databases

   DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.mysql',
           'OPTIONS': {
               'read_default_file': './.env',
           },
       }
   }
   ...

# Criar arquivo no diretório base chamado .env
# Este arquivo irá conter as informações do banco de dados.
$ nano ./.env

   [client]
   database = navedexAPI
   user = djangouser
   password = password
   default-character-set = utf8    

Como rodar este projeto:

# Crie uma pasta
$ mkdir navedexAPI
# Entre na pasta
$ cd navedexAPI
# Crie um virtual environment
$ python -m venv env
# Para ativar
$ source ./env/bin/activate
# Clone o repositório 
$ git clone git@github.com:lucasdmarten/navedexAPI.git
# Instale todas as bibliotecas
$ pip install -r requirements.txt
# Entre na pasta do projeto
$ cd navedexAPI
# Migre o banco de dados
$ python manage.py migrate
# Runserver...
$ python manage.py runserver

Rota para cadastro:

Registro de usuario:

http://localhost:8000/api/register/

Rota para login:

Aqui sera feito login com base no cadastro feito préviamente, e será liberado dois #tokens: refresh e access.

http://localhost:8000/api/login/

Rota para criar, listar, alterar e deletar Navers

http://localhost:8000/api/navers/

Rota para filtrar um Naver pelo ID e criar, listar, alterar e deletar o Naver selecionado

http://localhost:8000/api/navers/<int:id>

Rota para criar, listar, alterar e deletar Projetos

http://localhost:8000/api/projetos/

Rota para filtrar um Projetos pelo ID e criar, listar, alterar e deletar o Projetos selecionado

http://localhost:8000/api/projetos/<int:id>

Dificuldades

Relação entre Naver e Projeto:

Neste projeto fiquei com muita dificuldade em fazer a relação correta entre Naver e Projeto. Usei o model User do próprio Django mas customizado com email obrigatório. A partir deste model foi criado o objeto Projeto que possui relação ManyToMany com o MyUser, ou seja, um usuario pode participar de N projetos e cada projeto possui relação com N usuarios. Posteriormente foi criado o objeto Naver que está relacionado com usuario a partir do campo OneToOneField, e também projetos a partir do campo ManyToManyField, assim um naver está ligado a apenas UM usuario e o naver pode estar ligado com varios projetos.

Problema: Não consigo relacionar um Naver a um Projeto e nem o Projeto ao Naver a partir do método POST, só na pagina de admin do Django. Acredito que seja problema na serialização dos models.

About


Languages

Language:Python 100.0%