Bem-vindo ao Airbnb Django Project! Este projeto é uma aplicação web desenvolvida em Django que carrega uma lista de dados do Airbnb, limpa e enriquece os dados a partir da latitude e longitude com dados do clima da API Weather, permitindo a vizualização de estadias com informações detalhadas de preço, tipo, clima... A aplicação está containerizada utilizando Docker para facilitar o desenvolvimento, implantação e escalabilidade.
Os dados foram obtidos em https://insideairbnb.com/get-the-data/ que é uma base de dados aberta da Airbnb.
- Características
- Tecnologias Utilizadas
- Pré-requisitos
- Instalação
- 🚀 Uso
- 📜 Scripts Úteis
- 🧪 Testes Unitários
- 💡 Melhorias
- Autenticação de Usuários: Login e logout seguros com proteção contra ataques CSRF.
- Django Admin Customizado: Interface administrativa personalizada com funcionalidades adicionais, como upload e processamento de arquivos.
- Processamento de Dados: Manipulação e enriquecimento de dados utilizando Pandas.
- Containerização com Docker: Ambiente de desenvolvimento e produção isolado para maior consistência e facilidade de implantação.
- Back-end: Django 5.1.2
- Front-end: HTML, CSS (Bootstrap opcional)
- Banco de Dados: PostgreSQL (ou outro conforme configuração)
- Containerização: Docker, Docker Compose
- Processamento de Dados: Pandas
Antes de começar, certifique-se de ter as seguintes ferramentas instaladas na sua máquina:
Nota: A Weather foi a API usada para enriquecer os dados. Crie uma conta e obtenha sua key.
Siga os passos abaixo para configurar e executar o projeto localmente.
git clone https://github.com/seu-usuario/airbnb-django-project.git
cd airbnb-django-project
Crie um arquivo .env
na raiz do projeto com as seguintes variáveis (ajuste conforme necessário)
# .env
DEBUG=1
SECRET_KEY=django-insecure-(9dx3037w-^zj&hdxs%7$)1!6fr5jc#e_6g%b6!_i-a3)jnh6l
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=app_dev
SQL_USER=app
SQL_PASSWORD=app
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres
OPEN_WEATHER_KEY=your-secret-key
Nota: Certifique-se de substituir your-secret-key e outras variáveis sensíveis por valores seguros.
Nota: Atualize as variáveis de banco, caso tenha alterado no .evn, no arquivo docker-compose.yml
.
Construa as imagens Docker necessárias para a aplicação e o banco de dados.
docker-compose build
Inicie os containers em segundo plano.
docker-compose up -d
Nota: O projeto já está configurado para rodar migrate e collectstatic. Mas caso precise siga os comando abaixo
Execute as migrações do Django e colete os arquivos estáticos.
docker-compose exec app python manage.py makemigrations
docker-compose exec app python manage.py migrate
docker-compose exec app python manage.py collectstatic --noinput
Crie um superusuário para acessar o Django Admin.
docker-compose exec app python manage.py createsuperuser
Siga as instruções no terminal para definir o nome de usuário, email e senha.
Após seguir os passos de instalação, o projeto estará disponível em:
http://localhost:8009/
Para acessar a interface administrativa do Django:
-
Abra o navegador e vá para:
http://localhost:8009/
-
Faça login com as credenciais do superusuário que você criou anteriormente.
Nota: Na raíz do projeto existe um arquivo chamando listing.csv
com alguns dados para teste, já que a API da Weather
tem limitação de requisições no plano gratuito.
-
Clique em
Arquivos
no menu3.2 Adicione um arquivo cliando em
Adicionar arquivo
.3.3 Selecione o arquivo e o tipo e clique em
Salvar
. Você será redirecionado para a tela de listagem de arquivos. -
Na tela de listagem clique em
Processar
para tratar e enriquecer os dados. Após concluir o processo você será direcionado para a tela com os dados enriquecidos.
Aqui estão alguns comandos úteis para gerenciar o projeto:
-
Construir as imagens Docker:
docker-compose build
-
Iniciar os containers:
docker-compose up -d
-
Parar os containers:
docker-compose down
-
Aplicar migrações:
docker-compose exec app python manage.py migrate
-
Criar superusuário:
docker-compose exec app python manage.py createsuperuser
-
Coletar arquivos estáticos:
docker-compose exec app python manage.py collectstatic --noinput
-
Executar comandos Django:
Para executar qualquer comando Django, use:
docker-compose exec app python manage.py <comando>
Exemplo:
docker-compose exec app python manage.py shell
Testes unitários são fundamentais para garantir que sua aplicação funciona conforme o esperado. Este projeto utiliza os testes integrados do Django para verificar funcionalidades essenciais.
Para rodar os testes unitários, utilize o seguinte comando:
docker-compose exec app python manage.py test
Este comando irá descobrir e executar todos os testes localizados nas pastas de cada aplicativo dentro do seu projeto Django.
Os testes estão localizados na pasta test/<nome_app>/. Para adicionar novos testes, siga as etapas abaixo:
- Criar Arquivo de Testes: Dentro da pasta
tests/
, crie uma pasta com o nome do aplicativo desejado caso não exista e adicione os arquivos de testes dentro dele com prefixotest_<nome_do_teste>.py
.
Atualmente os testes não combrem todas as funcionalidades da aplicação.
Utilizar ferramentas como Celery para automatizar tarefas demoradas, como processamento de grandes uploads de arquivos ou envio de e-mails, melhorando a performance e a responsividade da aplicação.
Revisar e aprimorar o design da interface para torná-la mais intuitiva e atraente, melhorando a experiência geral do usuário.
Implementar o suporte a múltiplos idiomas e adaptar a aplicação para diferentes regiões, melhorando a acessibilidade para uma audiência global.
Além dos testes unitários, implementar testes de integração e end-to-end para garantir que diferentes partes do sistema funcionem bem juntas.
Configurar pipelines de integração e entrega contínuas (CI/CD) para automatizar o processo de deploy, testes e integração, garantindo lançamentos mais rápidos e confiáveis.
Atualmente temos que fazer o upload do arquivo para depois processar. Implementar o processamento logo após upload do arquivo deixa o processo automatizado para o usuário final.