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://urlreduce.herokuapp.com/🔥🔥🔥
Necessidade | Tecnologias |
---|---|
Framework backEnd | Django |
Framework FrontEnd | Chart.js |
CI | Github Actions |
CD | Heroku |
Banco de dados | PostgresSQL |
Gestão de dependecias | Pipenv |
Testes | Pytest |
Relatorio de Erros | Sentry |
Servidor de arquivo estaticos | Whitenose |
WSGI | Gunicorn |
-
criar o ambiente virtual:
pipenv install
-
Instalando django:
pipenv install django
-
Instalando o baker
pipenv install -d model-bakery
-
Instalando flake8 como dependencia de desenvolimento:
pipenv install -d flake8
-
Instalar o dj-database-url
-
Configurando o flake8 através do arquivo .flake8
[flake8] max-line-length = 120 exclude=.venv
Esta são apenas as configurações inicias com o tempo elas podem mudar
-
Criando o arquivo .gitignore
-
Inicializando o projeto Django
pipenv shell django-admin.exe startproject devpro .
Para testar pode-se rodar o servidor através de:
python manage.py runserver
-
Instalando o driver para postgres:
pipenv install psycopg2-binary
-
Instalando a lib python-decouple, criando o arquivo local .env e arquivo versionado 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
-
Criar a aplicação base
cd devpro python ..\manage.py startapp base
Para testar pode-se rodar o servidor através de:
python manage.py runserver
-
Instalando o pytest-django
pipenv install -d 'pytest-django'
criar o arquivo pytest.in
[pytest] DJANGO_SETTINGS_MODULE = devpro.settings
Rodando os testes.
python -m pytest
-
Instalando a cobertura de testes com codecov
pipenv install -d 'pytest-cov' codecov
-
Instalando o ipython e django-extensions
pipenv install ipython django-extensions
INSTALLED_APPS = [ ... 'django_extensions' ]
-
Instalando django debug toolbar
pipenv install -d django-debug-toolbar
Adicionar o codigo 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 whitenose
-
Instalando o sentry:
pipenv install sentry-sdk
Configurando o SENTRY_DSN no heroku:
heroku config:set SENTRY_DSN="https://asdasdasdsad"
-
Configurando o CI.
Link para o GitHub Actions file
-
Configurando o PyUp
schedule: '' update: false requirements: - Pipfile - Pipfile.lock
-
Instalar o arquivo gunicorn:
pipenv install gunicorn
-
Criando o aquivo Procfile:
release: python manage.py migrate --noinput web: gunicorn devpro.wsgi --log-file -
-
Configurando o postgres
-
Crianda apps pelo heroku-cli:
heroku apps:create urlreduce
-
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"
-
Testando do deploy no heroku:
git push heroku branch_local:master
-
Configuração para o Deploy automatico é feita no site.
-
Criando o app encutador:
cd devpro python ../manage.py startapp encurtador
-
Criando o usuario costumizado:
O usuário costumizado irá ficar no aquivos models.py do app encutador. O código base foi retirado da classe AbstracticUser encontrado no módulo django.contib.auth.models.py.
Criar UserManager usando novamente a Classe UserManager do módulo django.contib.auth.models.py.
Criar a varialvel no settings.py
AUTH_USER_MODEL='devpro.encutador'
Para testa posse usar o makemigrations
python manage.py makemigrations
-
Redirecionando usando o slug
return redirect(path)
-
Criando modelo para armazenar as Urls.
Adicionar CRUD do admin do django.
-
Criando a página dos relatórios.
-
Criando modelo para armazenar as UrlLog.
-
Mostrando o relatorio