Nesse repositorio temos o projeto desenvolvido no BootCamp Dev Pro da PythonPro. O objetivo desse projeto é desenvolver um redutor de url. O link para o deploy da aplicação no Heroku pode ser encontrada no link abaixo:
🔥🔥🔥https://quizdevprov2.herokuapp.com/🔥🔥🔥
| Necessidade | Tecnologias |
|---|---|
| Framework backEnd | Django |
| CI | Github Actions |
| CD | Heroku |
| Banco de dados | PostgresSQL |
| Gestão de dependecias | pip-tools |
| Testes | Pytest |
| Relatorio de Erros | Sentry |
| Servidor de arquivo estaticos | Whitenose |
| WSGI | Gunicorn |
-
Criando o arquivo .gitignore
-
criar o ambiente virtual:
python -m venv .venv -
instalando o gerenciador de dependecias
python -m pip install pip-tools -
Instalando as dependencias do projeto:
django dj-database-url python-decouple ipython django-extensions psycopg2-binary # opcional sentry-sdk gunicorn whitenoise
-
Instalando as dependencias de desenvolvimento:
model-bakery flake8 pytest-django pytest-cov codecov django-debug-toolbar
-
gerando e instalando as dependecias de desenvolmineto
pip-compile requirements.in pip install -r requirements.txt pip-compile requirements-dev.in pip install -r requirements-dev.txt -
Configurando o flake8 através do arquivo .flake8
[flake8] max-line-length = 120 exclude=.venv
-
Inicializando o projeto Django
pipenv shell django-admin.exe startproject quiz .
Para testar pode-se rodar o servidor através de:
python manage.py runserver -
Criando o arquivo local .env e arquivo contrib/env-sample
DEBUG=FALSE SECRET_KEY=Defina sua chave secreta aqui ALLOWED_HOSTS= INTERNAL_IPS= SENTRY_DSN= DATABASE_URL=postgres://postgres:postgres@localhost/testedb
-
Configurando o PyUp pelo arquivo .pyup.yml
schedule: '' update: false
-
Configura o codecov pelo arquivo .codecov.yml
coverage: status: project: default: # basic target: 0% patch: default: # basic target: 0%
-
Configurando o pytest-django
criar o arquivo pytest.in
[pytest] DJANGO_SETTINGS_MODULE = devpro.settings
Rodando os testes.
python -m pytest -
Configurando o CI.
Link para o GitHub Actions file
-
Criando o usuario costumizado:
O código base foi retirado da classe AbstracticUser e UserManager encontrado no módulo django.contib.auth.models.py. Criar a varialvel no settings.py
AUTH_USER_MODEL='quiz.encutador'
Para testa posse usar o makemigrations
python manage.py makemigrations -
Instalando o ipython e django-extensions
INSTALLED_APPS = [ ... 'django_extensions' ]
-
Instalando django debug toolbar
Precisa da tabela de usuarios. Por isso tem que se feita depois do migrate
Adicionar o código abaixo no arquivo settings.py
INTERNAL_IPS = config('INTERNAL_IPS', cast=Csv(), default=None) if DEBUG: INSTALLED_APPS.append('debug_toolbar') MIDDLEWARE.insert(0, 'debug_toolbar.middleware.DebugToolbarMiddleware')
Adicionar o codigo abaixo no arquivo url.py do projeto
if settings.DEBUG: import debug_toolbar urlpatterns.append(path('__debug__/', include(debug_toolbar.urls)))
-
Configurando a coleta dos arquivos estáticos:
STATIC_ROOT = BASE_DIR / 'staticfiles/'
-
Servindo os arquivos estaticos com o whitenose:
pipenv install whitenoseMIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # ... ]
-
Instalando o sentry:
Configurando o SENTRY_DSN no heroku:
heroku config:set SENTRY_DSN="https://asdasdasdsad" -
Criar a aplicação base
cd devpro python ..\manage.py startapp base
-
Criando o aquivo Procfile:
release: python manage.py migrate --noinput web: gunicorn devpro.wsgi --log-file -
-
Criando apps pelo heroku-cli:
heroku apps:create nomeappConfiguração para testar o deploy inicial sem coleta de arquivos estáticos
heroku config:set DISABLE_COLLECTSTATIC=1 -
Testando do deploy no heroku:
git push heroku branch_local:master -
Configuração para o Deploy automatico é feita no site.
-
Chave gerando a chave secreta para heroku:
>>>from django.core.management.utils import get_random_secret_key >>>get_random_secret_key()
-
Configurando as variaveis no heroku:
heroku config:set DEBUG=False heroku config:set SECRET_KEY="chave secreta de verdade"