Como documentar minha API Django automaticamente?

Esse dias fiz a seguinte pergunta para meu amigão Google, e depois de algunas sugestões, encontrei uma lib ligada a já conhecida ferramenta Swagger, chamada Django Rest Swagger. Essa ferramenta é muito simples de instalar, e podemos finalizar de forma bem documentada e automatica, todos as api’s e endpoint’s registrados em nosso projeto.

Vamos lá installar esse camarada!

Primeiro: Instale através do pip

$ pip install django-rest-swagger

Após realizar a instalação da lib com sucesso, o segundo passo é registra essa lib no nosso installed_app, (dentro do myapp/settings.py)

INSTALLED_APPS = [
    ...
    'rest_framework_swagger',
    ...
]

O passo seguinte é criar uma rota especificamente para visualização da documentação.

from django.conf.urls import url
from rest_framework_swagger.views import get_swagger_view

schema_view = get_swagger_view(title='Pastebin API')

urlpatterns = [
    url(r'^$', schema_view)
]

Finalmente, execute sua aplicação e visualize no browser.
screenshot-from-2017-01-19-22-47-16

 

 

 

Exim4 – Enviar email de teste pelo terminal

Depois das 15 horas configurando o seu servidor demail na VPS, você precisa fazer aquele belo teste, então nada melhor do que utilizar nosso familiar terminal, apenas com a linha de baixo já conseguimos enviar um email via terminal.


echo "This is a test." | mail -s Testing meu-email@meudominio.com.br

Erro – RemovedInDjango110Warning: Support for string view arguments to url() is deprecated

Um erro comum que aparece no log de execução do wsgi de um projeto django

... RemovedInDjango110Warning: Support for string view arguments to url() is deprecated ...

Isso ocorre por que usamos um argumento em formato de string no urls.py do nosso projeto.

Exemplo

# src/urls.py
url(r'^$', 'meuprojeto.views.home', name='home'),

Porém essa forma de declaração entrou em desuso a partir da versão 1.7 do django.
Então a forma de se utilizar as views no urls.py é assim:

# src/urls.py
import meuprojeto.views
url(r'^$', meuprojeto.views.home, name='home'),

Feito!

Fatal error: Python.h ao instalar algumas libs com pip na virtualenv

Ao instalar uma das minhas principais libs em meu novo droplet ubuntu server, tive a seguinte mensagem de erro:

./psycopg/psycopg.h:30:20: fatal error: Python.h: No such file or directory

E agora como resolver isso?

Fácil! na instalação do seu ambiente, talvez você esqueceu de instalar no sistema operacional uma lib muito importante que é a python-dev, então instale essa lib e provavelmente estará resolvido.

$ sudo apt-get install python-dev

Caso esteja utilizando python versão 3, o comando é quase o mesmo

$ sudo apt-get install python3-dev

Se ainda sim as sequencias anteriores não funcionares, tem isso:

$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install -y python3.4-dev
$ sudo apt-get install -y libpq-dev
$ pip3 install psycopg2

Instalar PostgreSQL no ubuntu

Uma instalação básica do postgresql no lado servidor é bem simples, vamos aos passos.

 

$ sudo apt-get install python-dev libpq-dev postgresql postgresql-contrib

Feito isso, vamos acessar nosso postgresql

$ sudo -u postgres psql postgres
\password postgres

Agora vamos criar o usuário

$ psql
CREATE USER desenvolvedor PASSWORD 'minhasenha';

Criamos um banco de dados

CREATE DATABASE 'meubanco';

Agora garantimos as permissões para esse usuário acessar a base recém criada

GRANT ALL PRIVILEGES ON DATABASE meubanco TO desenvolvedor;

Problema de locale no Linux

Algumas distros for server estão tento problemas com locale ao instala-los pela primeira vez, e a solução que encontrei essa semana na internet foi deletar o locale pt_BR, obviamente que se você fazer isso, terá a certeza absoluta do que está fazendo.

Então eis o comando via terminal

$ locale-gen --no-purge --lang pt_BR

Assim resolvi o problema, tento consciência do que foi feito.

Alterar shell de usuário no Linux

Algo interessante depois que você cria um usuário no linux, é alterar o shell ao qual ele terá a interação com sistema após logar-se, então com dois comandos simples podemos efetuar a alteração desse bash.

Primeiro, logados como ROOT (sudo) verificamos o caminho do bash do nosso sistema.

$ which bash
/bin/bash

Agora vamos definir rapidamente um novo usuário e adicionar o bash a esse usuário

$ useradd desenvolvedor
$ passwd desenvolvedor
$ chsh -s /bin/bash desenvolvedor

Feito!

Deploy com hooks do git

Um dos principais motivos de desapontamento de alguns desenvolvedores é a hora de fazer um deploy automatizado e eficiente sem ter que seguir aquelas ferramentas cheias de configurações e que no final das contas dão problemas por compatibilidades etc.

Aqui vou ensinar como fazer o deploy da maquina local para o servidor remoto, em poucos passos, utilizando uma hooks do git.

Acessando o servidor remoto e criando um repositório

Obs.: Antes de iniciar esse passo, certifique-se que você tem acesso SSH ao servidor remoto E tenha o git instalado em seu servidor remoto.

Acesse o ssh normalmente:

ssh usuariossh@meudominio.com

Vamos criar um padrão para armazenar o repositório em nosso servidor remoto, criando um diretório chamado “repos”dentro da “home” do servidor

cd ~

mkdir repos

sudo chown $USER:$USER ~/repos

sudo chmod -R 775 ~/repos

Agora vamos criar o respositório do nosso projeto dentro do diretório repos

cd ~/repos

mkdir meuprojeto.git && cd meuprojeto.git

git init --bare

Obs.: siga exatamente os comandos, pois  o –bare é essencial para criarmos um repositorio e não um projeto em si.

Agora vamos clonar o repositório do nosso projeto em nosso www do servidor remoto AINDA.

Obs.: ainda não saimos do servidor remoto, vamos clonar o repositório para dentro da /var/www do nosso servidor

git clone ~/repos/meuprojeto.git  /var/www/meuprojeto

Perfeito, agora vamos criar uma hooks dentro do repositório do nosso projeto

nano ~/repos/meuprojeto.git/hooks/post-receive

Dentro desse arquivo colocaremos os seguintes comandos

#!/bin/sh

cd /var/www/meuprojeto

env -i git reset --hard

env -i git pull origin master

Pronto, esse arquivo de hooks identificará qualquer alteração feita/recebida pelo nosso repositório (meuprojeto.git) e irá transferir(atualizar) nosso repositório remoto que está em /var/www/meuprojeto, então agora só falta clonarmos esse projeto para a máquina local e mandar bala!

Finalmente, vamos clonar o projeto para a máquina local

Agora estamos na máquina local, acesse o seu diretório de projetos, exemplo

cd ~/minhamaquina/www

e clone o projeto usando a seguinte url

git clone usuariossh@meudominio.com:~/repos/meuprojeto.git meuprojetolocal

Obs.: você irá clonar o repositório usando ssh, então tenha em mente que irá precisar do seu usuário ssh, e que ele tenha permissão de acesso a tais diretórios.

Feito esse projeto, você pode criar um arquivo no projeto local

cd meuprojeto

touch index.html

Adicionar, commitar e enviar essa alteração para o repositório remoto utilizando comandos normais de git

git add .

git commit -m "commit para o servidor remoto"

git push -u origin master

Digite sua senha de acesso ssh e aguarde ele finalizar o push. Após esse projeto, acesso o servidor remoto e verifique o diretório do projeto remoto (/var/www/meuprojeto) e veja que o index.html estará lá conforme nosso push.

Bom, essa foi uma passagem simples e didatica, com certeza tem que se aplicar um git flow melhor, mas já é o primeiro passo pra automatizar seu deploy.

Problemas

Pode ocorrer alguns erros de permissão nesse meio caminho, esteja atendo aos logs do git push, por que eles informa caso aconteça algum erro com a hooks