Comments (7)
Onde trabalho usamos da seguinte forma: criamos um outro arquivo chamado .env.example e nele vai todas as chaves sem valor e vai no commit. Se um outro desenvolvedor precisa trabalhar no projeto ele cria um arquivo .env se baseando no .env.example e preenche as chaves. Caso seja necessário uma nova chave adicionamos no .env.example que é para todos saberem que há chave nova.
from python-decouple.
Interessante @tporto. Mesmo conceito que eu usava/uso para gerenciar o meu local_settings.py. Tem sempre um template no projeto para que os novos devs iniciem a partir dele. Mas minha dúvida ainda permanece, pois e no caso da SECRET_KEY? As outras informações como db, email, tudo bem mas a SK é por projeto.
from python-decouple.
A secret_key usamos a que o django gera no projeto. Geramos uma nova apenas no deploy.
from python-decouple.
@tporto Então você gera uma nova secret_key pro deploy e todos os devs usam a secret_key que o django gerou e está no seu .env_template, certo?! Interessante. Parece ser uma boa alternativa.
from python-decouple.
Apenas apresentando como alternativa, aqui temos adotado uma abordagem ligeiramente diferente: Temos apenas um settings.py
(sem settings_local.py), e as configurações onde é possível estipular um padrão razoável são todas orientadas ao ambiente de produção, como por exemplo:
DEBUG = config("DEBUG", default=False, cast=bool)
As configurações sensíveis, como SECRET_KEY
, simplesmente não tem valor padrão:
SECRET_KEY = config('SECRET_KEY')
Desde modo, ao subir o projeto em uma máquina nova, o desenvolvedor é obrigado a estipular um valor para o seu ambiente.
Para integração com serviços "plugáveis", que podem ser desabilitados em um ambiente local sem que a aplicação seja comprometida, deixamos um valor padrão falsy
e verificamos se o serviço deve ser ativado com base no valor da configuração. Por exemplo, uma aplicação pode habilitar notificações PUSH no celular, se o Token do IONIC existe:
IONIC_TOKEN = config('IONIC_TOKEN', default=None)
E no código:
@shared_task(name='notification.notify_mobile')
def notify_mobile(notification_id, instance=None, session=None):
if not settings.IONIC_TOKEN:
return # Notificação está desligada
...
Aqui fazemos assim. Também acho bacana a abordagem de ter um .env.example
, só é necessário um cuidado adicional para manter o exemplo atualizado. Aqui nossa fonte única da verdade é o settings.py
. Se tem um config('CHAVE_QUALQUER'
lá significa que a configuração pode ser sobrescrita. Os devs se acostumam a olhar o código e se familiarizar com as variáveis mais comuns.
Abs,
from python-decouple.
Interessante a ideia também @fgmacedo . Obrigado pela dica.
from python-decouple.
Nos meus projetos eu tenho um diretório contrib
com um shell script que monta o meu .env
ou settings.ini
. Uso isso apenas quando um novo developer pega o projeto. No mais, o processo de deploy sempre usa variáveis de ambiente.
O propósito do python-decoupl
é você nunca precisar de mais de um settings.py
, variando apenas as variáveis de ambiente.
Boa thread essa! Se acharem que dá pra pegar os aprendizados que vcs discutiram aqui e melhorar o README, pull request são bem-vindos.
from python-decouple.
Related Issues (20)
- Pycharm and the python-decouple package HOT 2
- Support for multiline strings HOT 9
- Pyright reportGeneralTypeIssues error with cast HOT 1
- Add type hints HOT 1
- Feature request: Cascaded settings files HOT 8
- question Changing settings HOT 2
- Feature Request: Fallback to .env.example HOT 3
- decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value. HOT 4
- Csv(None) hangs
- Infinite recursion in _find_file on Windows when called via pytest HOT 5
- Cascaded Settings Files
- This bugs me so much - Install name differs from package name causing IDE warnings HOT 1
- Feature idea: optional value HOT 2
- decouple.UndefinedValueError: SECRET_KEY not found. HOT 1
- ENV when use Csv can't be optional HOT 1
- Issue with Environment Variables on AWS Elastic Beanstalk HOT 5
- Issue with typings using Pylance type checking HOT 2
- profiling through environment variables HOT 1
- Issues with installation using pipenv HOT 2
- Installation with Poetry give back an error HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from python-decouple.