diff --git a/db.sqlite3 b/db.sqlite3 index 7da257f..f2069f1 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/filme/admin.py b/filme/admin.py index b9a8676..23043cc 100644 --- a/filme/admin.py +++ b/filme/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin -from .models import Filme +from .models import Filme, Episodio # Register your models here. -admin.site.register(Filme) \ No newline at end of file +admin.site.register(Filme) +admin.site.register(Episodio) diff --git a/filme/migrations/0002_alter_filme_categoria_episodio.py b/filme/migrations/0002_alter_filme_categoria_episodio.py new file mode 100644 index 0000000..dbd39b2 --- /dev/null +++ b/filme/migrations/0002_alter_filme_categoria_episodio.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2.5 on 2023-09-17 17:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('filme', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='filme', + name='categoria', + field=models.CharField(choices=[('ANALISES', 'Análises'), ('PROGRAMACAO', 'Programação'), ('APRESENTACAO', 'Apresentação'), ('OUTROS', 'Outros'), {'ANIMES', 'Animes'}], max_length=15), + ), + migrations.CreateModel( + name='Episodio', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('titulo', models.CharField(max_length=100)), + ('video', models.URLField()), + ('filme', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='episodios', to='filme.filme')), + ], + ), + ] diff --git a/filme/models.py b/filme/models.py index 62cbd3d..7324a69 100644 --- a/filme/models.py +++ b/filme/models.py @@ -6,21 +6,37 @@ ('PROGRAMACAO', 'Programação'), ('APRESENTACAO', 'Apresentação'), ('OUTROS', 'Outros'), + {'ANIMES', 'Animes'} ) -# Criar o filme +# Create o film + + class Filme(models.Model): titulo = models.CharField(max_length=100) thumb = models.ImageField(upload_to='thumb_filmes') descricao = models.TextField(max_length=1000) - categoria = models.CharField(max_length=15, choices=LISTA_CATEGORIAS) # Lista de Opções + categoria = models.CharField( + max_length=15, choices=LISTA_CATEGORIAS) # Lista de Opções visualizacoes = models.IntegerField(default=0) - data_criacao = models.DateTimeField(default=timezone.now) # Registrar data e hora que o filme for criado + # Registrar data e hora que o filme for criado + data_criacao = models.DateTimeField(default=timezone.now) - #Formato de string de um objeto dessa classe Filme + # Formato de string de um objeto dessa classe Filme def __str__(self): return self.titulo # Criar os episódios + +class Episodio(models.Model): + # parametos do ForeignKey, "nome_da_tabela", related_name relaciona os episodios ao filme, on_delete se deletar o filme os episodios também sao deletados + filme = models.ForeignKey( + "Filme", related_name="episodios", on_delete=models.CASCADE) + titulo = models.CharField(max_length=100) + video = models.URLField() + + def __str__(self): + return self.filme.titulo + ' - ' + self.titulo + # Criar o usuário diff --git a/filme/novos_context.py b/filme/novos_context.py new file mode 100644 index 0000000..7c3a135 --- /dev/null +++ b/filme/novos_context.py @@ -0,0 +1,13 @@ +from .models import Filme + + +def lista_filmes_recentes(request): + # Lista de todos os filmes ordenados em ordem de data_criacao decrescente colocando -data_criacao + lista_filmes = Filme.objects.all().order_by( + '-data_criacao')[0:10] # Pegando os 10 primeiros + return {"lista_filmes_recentes": lista_filmes} + + +def lista_filmes_emalta(request): + lista_filmes = Filme.objects.all().order_by('-visualizacoes')[0:10] + return {"lista_filmes_emalta": lista_filmes} diff --git a/filme/templates/detalhesfilme.html b/filme/templates/detalhesfilme.html new file mode 100644 index 0000000..d8d87c8 --- /dev/null +++ b/filme/templates/detalhesfilme.html @@ -0,0 +1,39 @@ +{% extends 'base.html' %} + +{% block title %} + DetalhesFilme Hashflix +{% endblock %} + +{% block head %} +{% load static %} + +{% endblock %} + +{% block content %} +
+

Detalhes do filme: {{ object.titulo }}

+

{{ object }}

+

{{ object.descricao }}

+ + +

Episódios

+ + {% for episodio in object.episodios.all %} + +

Episódio {{ forloop.counter }}: {{ episodio.titulo }}

+
+ {% endfor %} + +

Filmes Relacionados

+
+ {% for film_rel in filmes_relacionados %} + + {% endfor %} +
+ + +
+{% endblock %} diff --git a/filme/templates/homefilmes.html b/filme/templates/homefilmes.html new file mode 100644 index 0000000..8a664e9 --- /dev/null +++ b/filme/templates/homefilmes.html @@ -0,0 +1,39 @@ +{% extends 'base.html' %} + +{% block title %} + HomeFilmes Hashflix +{% endblock %} + +{% block head %} +{% load static %} + +{% endblock %} + +{% block content %} +
+

Esta é a HomeFilmes

+ + {% for filme in object_list %} +

{{ filme.titulo }}

+
+

{{ filme.descricao }}

+ + {% endfor %} +
+ +
+

Novo

+ {% for filme in lista_filmes_recentes %} +

{{ filme }}

+ {% endfor %} +
+ +
+

Em Alta

+ {% for filme in lista_filmes_emalta %} +

{{ filme }}

+ {% endfor %} +
+ + +{% endblock %} diff --git a/filme/urls.py b/filme/urls.py index 5df1c05..3899fb7 100644 --- a/filme/urls.py +++ b/filme/urls.py @@ -1,6 +1,12 @@ from django.urls import path, include -from .views import homepage +from .views import Homepage, HomeFilmes, DetalhesFilme + + +app_name = 'filme' + urlpatterns = [ - path('', homepage) # para ser o index + path('', Homepage.as_view(), name='homepage'), + path('filmes/', HomeFilmes.as_view(), name='homefilmes'), + path('filmes/', DetalhesFilme.as_view(), name='detalhesfilme'), ] diff --git a/filme/views.py b/filme/views.py index 6ac14be..af71cb3 100644 --- a/filme/views.py +++ b/filme/views.py @@ -1,7 +1,38 @@ from django.shortcuts import render +from .models import Filme +from django.views.generic import TemplateView, ListView, DetailView # Create your views here. -def homepage(request): - return render(request, "homepage.html") +class Homepage(TemplateView): + template_name = 'homepage.html' + + +class HomeFilmes(ListView): + template_name = "homefilmes.html" + model = Filme + + +class DetalhesFilme(DetailView): + template_name = "detalhesfilme.html" + model = Filme + + def get_context_data(self, **kwargs): + # Executa primeiro a função da superClass + context = super(DetalhesFilme, self).get_context_data(**kwargs) + # Lista dos filmes relacionados de acordo com a categoria + filmes_relacionados = Filme.objects.filter( + categoria=self.get_object().categoria) + context['filmes_relacionados'] = filmes_relacionados + return context + +# def homepage(request): +# return render(request, "homepage.html") + +#url - view - template +# def homefilmes(request): +# context = {} +# lista_filmes = Filme.objects.all() # pega todos os objetos do banco de dados +# context['lista_filmes'] = lista_filmes +# return render(request, "homefilmes.html", context) diff --git a/hashflix/settings.py b/hashflix/settings.py index c54867d..1a83906 100644 --- a/hashflix/settings.py +++ b/hashflix/settings.py @@ -64,6 +64,8 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'filme.novos_context.lista_filmes_recentes', + 'filme.novos_context.lista_filmes_emalta', ], }, }, diff --git a/hashflix/urls.py b/hashflix/urls.py index 2c4de49..3275983 100644 --- a/hashflix/urls.py +++ b/hashflix/urls.py @@ -22,7 +22,7 @@ urlpatterns = [ path('admin/', admin.site.urls), - path('', include('filme.urls')) # para ser o index + path('', include('filme.urls', namespace='filme')), # para ser o index ] urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) -urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/media/thumb_filmes/deathnote.jpg b/media/thumb_filmes/deathnote.jpg new file mode 100644 index 0000000..f54caa1 Binary files /dev/null and b/media/thumb_filmes/deathnote.jpg differ diff --git a/media/thumb_filmes/fairytail.png b/media/thumb_filmes/fairytail.png new file mode 100644 index 0000000..af31034 Binary files /dev/null and b/media/thumb_filmes/fairytail.png differ diff --git a/planejamento.txt b/planejamento.txt index 7f26eaa..b9202a2 100644 --- a/planejamento.txt +++ b/planejamento.txt @@ -14,7 +14,8 @@ - quantidade de views - data de criação - Episodios - - videos + - Relação de qual filme o Episodio pertence + - videos (link do vídeo) - titulo - Barra de Pesquisa \ No newline at end of file diff --git a/static/css/style_detalhesfilmes.css b/static/css/style_detalhesfilmes.css new file mode 100644 index 0000000..83138f6 --- /dev/null +++ b/static/css/style_detalhesfilmes.css @@ -0,0 +1,18 @@ +.content { + padding-top: 4.68rem; /*Ajuste isso de acordo com a altura da sua barra de navegação */ +} + +.films-list{ + display: flex; + flex-direction: row; + gap: 1rem; +} + +.text-list{ + text-align: center; +} + +.images-list{ + height: 10rem; + width: auto; +} diff --git a/static/css/style_homefilmes.css b/static/css/style_homefilmes.css new file mode 100644 index 0000000..532d463 --- /dev/null +++ b/static/css/style_homefilmes.css @@ -0,0 +1,3 @@ +.content { + padding-top: 4.68rem; /*Ajuste isso de acordo com a altura da sua barra de navegação */ +} diff --git a/templates/navbar.html b/templates/navbar.html index d832312..6f160e7 100644 --- a/templates/navbar.html +++ b/templates/navbar.html @@ -1,7 +1,7 @@ {% load static %} \ No newline at end of file +