Início Profile Projeto
Avatar de

Cristiane Sebem Damo

django_alura_space

  • python
  • django
  • html
  • css

Django Alura Space

Badge em Desenvolvimento

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

image

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

django Python SQLite370 svg

Como instalar o projeto na sua máquina:

Requisitos:

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:

image

  • 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