Python Decouple – Como configurar suas variáveis sensíveis

Python Decouple ?

O python decouple, mais conhecido somente por decouple, serve para criarmos um arquivo com todas as configurações sensíveis do projeto como login e password do banco de dados, no Django a sua SECRET_KEY, as suas variáveis de acesso do AmazonS3 e qualquer outra informação que possa variar entre o ambiente de desenvolvimento e produção.

O decouple procura por variáveis setadas no ambiente, caso não encontre nas variáveis de ambiente ele irá procurar por um arquivo .env onde as variáveis deverão estar setadas.

Por exemplo, no Django, a variável SECRET_KEY não deve ser exposta publicamente (via git ou qualquer controle de versão), então podemos mascarar ela dentro de settings.py:

# em settings.py
SECRET_KEY = config('SECRET_KEY')

E criamos um arquivo .env na mesma pasta do manage.py

SECRET_KEY=1c&rge8ac9dq)y62z&u3=a4td=hb)d3(fc*w4rm3_=hw50tuvr

Agora este arquivo .env deverá ir para o .gitignore pois ele nunca deve ser ‘commitado’.

Com isso o decouple irá setar a variável quando o projeto rodar procurando pela variável primeiro nas variáveis de  ambiente e caso não encontre irá procurar no .env. Como este aquivo .env não irá para o controle de versão, no servidor de produção precisamos setar a variável de ambiente SECRET_KEY ou criamos um arquivo .env direto no servidor.

Instalação

Para instalar o decouple basta digitar:

# no terminal com virtualenv ativo
pip install python-decouple

E adicionar em requirements.txt:

python-decouple

 

Utilizando o Decouple

Para utilizar o decouple será necessário criar um arquivo .env na mesma pasta do manage.py (Django), e adicionar este arquivo ao .gitignore.

Para mascarar a variável DEBUG, vamos em settings.py:

# em settings.py 
from decouple import config

...

DEBUG = config('DEBUG', default=False, cast=bool)

e no arquivo .env:

# em .env
DEBUG=True

Note que no arquivo .env não pode haver espaços.

Como o decouple procura primeiro nas variáveis de ambiente, se você executar o seguinte comando:

# no terminal (linux - Mac)
DEBUG=False python manage.py runserver

Não importa o que esteja setado no .env, a variável de ambiente irá ser prioritária e o decouple não irá procurá-la no arquivo .env.

Agora com isso você poderá mascarar qualquer variável sensível de forma simples e rápida!

 

How to start Django project with Pyenv

First things first….

You may are asking: “Why should i use a virtualenv ?”

That`s a good question, and the answer is easy:

You use a Virtual Environment for isolate all  your project dependencies. When your are developing a Django Project you may need some packages for a specific project and some other packages for other project, even a different version of django. With a Virtual Environment you certify that  only the dependencies of your project are installed and with the correct version of each one. You can have a project with Django 1.8 in a virtualenv and another project with Django 1.10 with out any problems. When we think about deployement its even better because you know which packages are needed for the specific project, with a simple pip freeze in terminal inside your VirtualEnv you can check all your packages, it really helps! So i hope at this point you already undestand why use a VirtualEnv. Continue reading “How to start Django project with Pyenv”