django_alura_space
Django Alura Space
Página web que permite que usuários publiquem fotos sobre o espaço e possam ver quais são as imagens mais visualizadas e as mais apreciadas pela comunidade de entusiastas de astronomia. As fotos ficam disponíveis em uma galeria que pode ser acessada por usuários cadastrados.
🪧 Vitrine.Dev | |
---|---|
✨ Nome | django_alura_space |
🏷️ Tecnologias | python, django, html, css |
🔥 Desafio | https://cursos.alura.com.br/formacao-django |
Sobre o Projeto
O projeto django_alura_space, como fica evidenciado em seu nome, utiliza como principal tecnologia o framework Django, desenvolvido na linguagem Python. O banco de dados utilizado para persistência dos dados é o SQLite.
A aplicação está sendo desenvolvido durante a Formação em Django da escola de Programação da Alura, que atualmente está disponível até o módulo 3. Conforme o avanço dos estudos na Formação, outras funcionalidades do projeto serão lieradas.
Funcionalidades desenvolvidas
Usuários
- Cadastro de usuário
- Login de usuário
- Logout
Galeria
- Galeria de imagens: no index são exibidas as fotos ordenadas pelo campo 'data_fotografia' e filtradas pelo campo "publicada=True".
- Detalhe: são exibidas mais informações sobre a imagem publicada ao clicar sobre ela.
- Imput de busca: é feito um filtro das imagens que contém a palavra informada na redação do seu nome.
Melhorias Feitas
Nota: Essas melhorias podem ser diferentes das orientadas na Formação de Django da Alura. Se você está seguindo os pasos do curso, você deve buscar o repositório indicado pelo instrutor.
Usuários
- Filtro do menu com acesso restrito aos usuários logados
- Link para acesso direto ao admin para usuários que tem permissão de acesso
Galeria
- Exibição das tags na página principal de forma dinâmica: foi criado uma tabela no banco de dados para cadastrar as categorias possíveis, que corresponem às tags da página principal.
- As categorias (ou tags) passam a ser relacionadas às fotografias atrávés de um campo tipo chave estrangeira.
- As imagens podem ser filtradas pelas tags, basta clicar sobre a ela.
- São exibidas, na galeria e no detalhe da imagem, a quantidade de usuários que favoritaram e quantidade de visualizações da fotografia.
- Foi criado um campo de "ManyToMany" no model de "Fotografia", para criar uma relação de "muitos para muitos" entre usuários e fotografias, para representar as imagens "favoritas" do usuário
class Fotografia(models.Model):
nome = models.CharField(max_length=100, null=False, blank=False)
legenda = models.CharField(max_length=150, null=False, blank=False)
descricao = models.TextField(null=False, blank=False)
foto = models.ImageField(upload_to='fotos/%Y/%m/%d/', blank=True)
publicada = models.BooleanField(default=False)
data_fotografia = models.DateTimeField(default=datetime.now, blank=True)
usuario = models.ForeignKey(to=User, on_delete=models.SET_NULL, null=True, blank=False, related_name='user')
categoria = models.ForeignKey(to=Categoria, on_delete=models.PROTECT, null=True, blank=True)
favorito = models.ManyToManyField(User)
total_favoritos = models.PositiveIntegerField(default=0)
total_visualizacoes = models.PositiveIntegerField(default=0)
def __str__(self):
return self.nome
def favorito(request, foto_id):
user_id = request.user.id
fotografia = get_object_or_404(Fotografia, pk=foto_id)
favorito = fotografia.favorito.filter(user=user_id)
total_favoritos = fotografia.total_favoritos
if favorito:
fotografia.favorito.remove(user_id)
fotografia.total_favoritos = int(total_favoritos) - 1
else:
fotografia.favorito.add(user_id)
fotografia.total_favoritos = int(total_favoritos) + 1
fotografia.save()
return redirect ('index')
- O usuário pode favoritar a imagem (um ícone de coração ficará alterado quando a imagem for curtida).
- Pode ver as suas fotos favoritas.
- Pode ver o ranque das imagens mais favoritadas.
- Cada vez que um usuário entra no detalhe da imagem, é adicionada uma visualização à fotografia
- O usuário pode ver quais são as imagens mais visualizadas
Diagrama de Classes
Alguns campos da tabela de usuário não foram detalhados aqui. Esta tabela corresponde a tabela criada pelo Django para controle de usuários do sistema
Principais tecnologias utilizadas
Como instalar o projeto na sua máquina:
Requisitos:
Instalação do Python (a partir da versão 3.9)
Instalação do Git
https://git-scm.com/book/pt-br/v2/Come%C3%A7ando-Instalando-o-Git
Clonando projeto para máquina local:
- Criar repositório onde será mantido o projeto e posicione-se, via terminal, dentro dele.
- Rode o comando
git clone https://github.com/csdamo/django_alura_space.git
Criando ambiente virtual de desenvolvimento:
- No prompt de comando, executar o comando
pip install virtualenv
- Pelo prompt, vá até o diretório do projeto e execute o comando a seguir. Será criada uma pasta dentro do repositório com o nome "venv"
virtualenv venv
- Ative o ambiente virtual de desenvolvimento: ainda no prompt de comando (dentro do repositório do projeto) execute o comando
venv/Scripts/activate
(Windows)
source venv/bin/activate
(Linux)
- Para você saber se o ambiente virtual foi ativado, perceba se antes do caminho do seu diretório, aparece o nome do ambiente entre parênteses.
Ex.: (venv) C:\Users\seunome\desenv\django_alura_space>
Instalando bibliotecas
- Dentro do ambiente virtual, para instalar as bibliotecas na versão correta para o projeto , rodar o comando
pip install -r requirements.txt
Criando Banco de dados e testando aplicação
- Teste a aplicação subindo o servidor: ainda com o seu ambiente virtual ativado, rode o comando
python .\manage.py runserver
. Você deverá ver a mensagem:
- Saia do servidor apertando
Ctrl
+c
para voltar para a linha de comando. - Certifique-se de que continua com o ambiente virtual ativado, e rode o comando a seguir para riar obanco de dados e as tabelas necessárias para o projeto
python .\manage.py migrate
- Atualmente, não há uma interface personalizada para que qualquer usuário possa publicar suas fotos, sendo assim, isso deverá ser feito pelo console do admin. Para isso, crie um superusuário através do comando
python .\manage.py createsuperuser
- Informe seu nome de usuário, e-mail (opcional) e senha.
- Agora, suba o servidor novamente (
python .\manage.py runserver
) e vá até o seu navegador e coloque o endereço: http://127.0.0.1:8000/admin. Você será direcionado para uma página de login. - Com isso, você já pode cadastrar suas fotos e ver o resultado na página principal: http://127.0.0.1:8000