From 86536337f5bdd02aaff10a579c3a7aef775c990a Mon Sep 17 00:00:00 2001 From: Mateus Stano Junqueira <mateusstano@usp.br> Date: Sun, 6 Nov 2022 14:31:46 -0300 Subject: [PATCH] Revert "Merge branch 'comment' into 'main'" This reverts merge request !1 --- albuns/migrations/0001_initial.py | 56 -- albuns/templates/albuns/delete.html | 12 - albuns/templates/albuns/detail.html | 50 - albuns/templates/albuns/index.html | 22 - albuns/templates/albuns/review.html | 13 - albuns/urls.py | 16 - albuns/views.py | 93 -- entrega2/settings.py | 4 +- entrega2/urls.py | 2 +- {albuns => movies}/__init__.py | 0 {albuns => movies}/admin.py | 4 +- {albuns => movies}/apps.py | 4 +- {albuns => movies}/forms.py | 10 +- movies/migrations/0001_initial.py | 40 + movies/migrations/0002_list.py | 25 + movies/migrations/0003_provider.py | 23 + .../0004_movie_info_movie_post_date.py | 25 + ..._alter_movie_info_alter_movie_post_date.py | 23 + {albuns => movies}/migrations/__init__.py | 0 {albuns => movies}/models.py | 20 +- movies/temp_data.py | 866 ++++++++++++++++++ .../templates/movies}/create.html | 4 +- .../templates/movies}/create_list.html | 2 +- movies/templates/movies/delete.html | 12 + movies/templates/movies/detail.html | 24 + movies/templates/movies/index.html | 23 + .../templates/movies}/lists.html | 10 +- movies/templates/movies/review.html | 13 + .../templates/movies}/search.html | 10 +- .../templates/movies}/update.html | 4 +- {albuns => movies}/tests.py | 0 movies/urls.py | 17 + movies/views.py | 116 +++ templates/base.html | 4 +- 34 files changed, 1245 insertions(+), 302 deletions(-) delete mode 100644 albuns/migrations/0001_initial.py delete mode 100644 albuns/templates/albuns/delete.html delete mode 100644 albuns/templates/albuns/detail.html delete mode 100644 albuns/templates/albuns/index.html delete mode 100644 albuns/templates/albuns/review.html delete mode 100644 albuns/urls.py delete mode 100644 albuns/views.py rename {albuns => movies}/__init__.py (100%) rename {albuns => movies}/admin.py (60%) rename {albuns => movies}/apps.py (64%) rename {albuns => movies}/forms.py (82%) create mode 100644 movies/migrations/0001_initial.py create mode 100644 movies/migrations/0002_list.py create mode 100644 movies/migrations/0003_provider.py create mode 100644 movies/migrations/0004_movie_info_movie_post_date.py create mode 100644 movies/migrations/0005_alter_movie_info_alter_movie_post_date.py rename {albuns => movies}/migrations/__init__.py (100%) rename {albuns => movies}/models.py (75%) create mode 100644 movies/temp_data.py rename {albuns/templates/albuns => movies/templates/movies}/create.html (75%) rename {albuns/templates/albuns => movies/templates/movies}/create_list.html (79%) create mode 100644 movies/templates/movies/delete.html create mode 100644 movies/templates/movies/detail.html create mode 100644 movies/templates/movies/index.html rename {albuns/templates/albuns => movies/templates/movies}/lists.html (59%) create mode 100644 movies/templates/movies/review.html rename {albuns/templates/albuns => movies/templates/movies}/search.html (67%) rename {albuns/templates/albuns => movies/templates/movies}/update.html (58%) rename {albuns => movies}/tests.py (100%) create mode 100644 movies/urls.py create mode 100644 movies/views.py diff --git a/albuns/migrations/0001_initial.py b/albuns/migrations/0001_initial.py deleted file mode 100644 index d311898..0000000 --- a/albuns/migrations/0001_initial.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 4.1.1 on 2022-11-06 17:04 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Album', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('release_year', models.IntegerField()), - ('poster_url', models.URLField(null=True)), - ('post_date', models.DateTimeField(auto_now=True)), - ('info', models.CharField(max_length=255000)), - ], - ), - migrations.CreateModel( - name='Provider', - fields=[ - ('album', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='albuns.album')), - ('service', models.CharField(blank=True, max_length=255)), - ('has_flat_price', models.BooleanField(default=False)), - ('price', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)), - ], - ), - migrations.CreateModel( - name='Review', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('post_date', models.DateTimeField(auto_now=True)), - ('text', models.CharField(max_length=255)), - ('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='albuns.album')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='List', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('albuns', models.ManyToManyField(to='albuns.album')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/albuns/templates/albuns/delete.html b/albuns/templates/albuns/delete.html deleted file mode 100644 index 663ee57..0000000 --- a/albuns/templates/albuns/delete.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -<form action="{% url 'albuns:delete' album.id %}" method="post"> - {% csrf_token %} - <p> - Você tem certeza que deseja apagar o álbum "{{ album.name }} ({{ album.release_year }})"? - </p> - <button type="submit">Apagar</button> -</form> - -{% endblock content %} \ No newline at end of file diff --git a/albuns/templates/albuns/detail.html b/albuns/templates/albuns/detail.html deleted file mode 100644 index b52ac35..0000000 --- a/albuns/templates/albuns/detail.html +++ /dev/null @@ -1,50 +0,0 @@ -{% extends 'base.html' %} - -{% block title %} -{{ album.name }} ({{ album.release_year }} -{% endblock title %} - -{% block content %} -<h2>Detalhes do Ãlbum {{ album.name }} ({{ album.release_year }}) — {{ album.post_date|date:"D d M Y"}}</h2> - -<hr> - -<section class="dados-de-album"> - <img src="{{ album.poster_url }}" alt="poster do album {{ album.name}}"> - <ul> - <li>Nome: {{ album.name }}</li> - <li>Ano de Lançamento: {{ album.release_year }} </li> - <li>Data de Postagem: {{album.post_date }} </li> - <li>Informação: {{album.info }}</li> - <li><a href="{% url 'albuns:review' album.id %}">Comentar</a></li> - <li><a href="{% url 'albuns:update' album.id %}">Editar</a></li> - <li><a href="{% url 'albuns:delete' album.id %}">Apagar</a></li> - </ul> -</section> - -<hr> - -<section> - <header> - <h3>Comentários</h3> - </header> - <ul> - {% if album.review_set.all %} - {% for review in album.review_set.all reversed %} - <figure> - <blockquote> - "{{ review.text }}" - </blockquote> - <figcaption>—{{ review.author }} | {{ review.post_date|date:"D d M Y" }} {{ review.post_date|time:"H:i" }} - </figure> - {% endfor %} - {% else %} - <p>Ainda não existe nenhum comentário para este filme.</p> - {% endif %} - </ul> - - <hr> - - <a href="{% url 'albuns:review' album.pk %}"><button>Adicione um Comentario</button></a> -</section> -{% endblock content %} \ No newline at end of file diff --git a/albuns/templates/albuns/index.html b/albuns/templates/albuns/index.html deleted file mode 100644 index 015f012..0000000 --- a/albuns/templates/albuns/index.html +++ /dev/null @@ -1,22 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -<h2>Todos os Ãlbuns</h2> -<section> - <p>Não encontrou o álbum? <a href="{% url 'albuns:create' %}">Adicionar Novo Ãlbum</a></p> -</section> -{% if album_list %} -<section class="lista-de-cards"> - {% for album in album_list %} - <article class="card"> - <a href="{% url 'albuns:detail' album.id %}"><img src="{{ album.poster_url }}" - alt="poster do album {{ album.name}}"></a> <!-- modifique esta linha --> - <p>{{ album.name }} ({{ album.release_year }})</p> - </article> - {% endfor %} -</section> -{% else %} -<p>Não foi encontrado nenhum album.</p> -{% endif %} - -{% endblock content %} \ No newline at end of file diff --git a/albuns/templates/albuns/review.html b/albuns/templates/albuns/review.html deleted file mode 100644 index 83bf1ae..0000000 --- a/albuns/templates/albuns/review.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends 'base.html' %} - -{% block content %} -<h2>Comentar sobre o Ãlbum {{ album.name }} ({{ album.release_year }})</h2> - -<form action="{% url 'albuns:review' album.id %}" method="post"> - {% csrf_token %} - {{ form.as_p }} - <button type="submit">Comentar</button> -</form> - -<p><a href="{% url 'albuns:detail' album.id %}">Voltar para a página do álbum</a></p> -{% endblock content %} \ No newline at end of file diff --git a/albuns/urls.py b/albuns/urls.py deleted file mode 100644 index 32a6858..0000000 --- a/albuns/urls.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.urls import path - -from . import views - -app_name = 'albuns' -urlpatterns = [ - path('', views.AlbumListView.as_view(), name='index'), - path('create/', views.create_album, name='create'), - path('<int:album_id>/', views.detail_album, - name='detail'), - path('update/<int:album_id>/', views.update_album, name='update'), - path('delete/<int:album_id>/', views.delete_album, name='delete'), - path('<int:album_id>/review/', views.create_review, name='review'), - path('lists/', views.ListListView.as_view(), name='lists'), - path('lists/create', views.ListCreateView.as_view(), name='create-list'), -] diff --git a/albuns/views.py b/albuns/views.py deleted file mode 100644 index 5532b47..0000000 --- a/albuns/views.py +++ /dev/null @@ -1,93 +0,0 @@ -from django.http import HttpResponseRedirect -from django.shortcuts import get_object_or_404, render -from django.urls import reverse, reverse_lazy -from django.views import generic - -from .forms import AlbumForm, ProviderForm, ReviewForm -from .models import List, Album, Provider, Review - - -def detail_album(request, album_id): - album = get_object_or_404(Album, pk=album_id) - context = {'album': album} - return render(request, 'albuns/detail.html', context) - - -class AlbumListView(generic.ListView): - model = Album - template_name = 'albuns/index.html' - - -def create_album(request): - if request.method == 'POST': - album_form = AlbumForm(request.POST) - else: - album_form = AlbumForm() - context = {'album_form': album_form, } - return render(request, 'albuns/create.html', context) - - -def update_album(request, album_id): - album = get_object_or_404(Album, pk=album_id) - - if request.method == "POST": - form = AlbumForm(request.POST) - if form.is_valid(): - album.name = form.cleaned_data['name'] - album.release_year = form.cleaned_data['release_year'] - album.poster_url = form.cleaned_data['poster_url'] - album.save() - return HttpResponseRedirect( - reverse('albuns:detail', args=(album.id, ))) - else: - form = AlbumForm( - initial={ - 'name': album.name, - 'release_year': album.release_year, - 'poster_url': album.poster_url - }) - - context = {'album': album, 'form': form} - return render(request, 'albuns/update.html', context) - - -def delete_album(request, album_id): - album = get_object_or_404(Album, pk=album_id) - - if request.method == "POST": - album.delete() - return HttpResponseRedirect(reverse('albuns:index')) - - context = {'album': album} - return render(request, 'albuns/delete.html', context) - - -def create_review(request, album_id): - album = get_object_or_404(Album, pk=album_id) - if request.method == 'POST': - form = ReviewForm(request.POST) - if form.is_valid(): - review_author = form.cleaned_data['author'] - review_text = form.cleaned_data['text'] - review = Review(author=review_author, - text=review_text, - album=album) - review.save() - return HttpResponseRedirect( - reverse('albuns:detail', args=(album_id, ))) - else: - form = ReviewForm() - context = {'form': form, 'album': album} - return render(request, 'albuns/review.html', context) - - -class ListListView(generic.ListView): - model = List - template_name = 'albuns/lists.html' - - -class ListCreateView(generic.CreateView): - model = List - template_name = 'albuns/create_list.html' - fields = ['name', 'author', 'albuns'] - success_url = reverse_lazy('albuns:lists') diff --git a/entrega2/settings.py b/entrega2/settings.py index 1c31032..693bbe5 100644 --- a/entrega2/settings.py +++ b/entrega2/settings.py @@ -1,5 +1,5 @@ """ -Django settings for albunsite project. +Django settings for moviesite project. Generated by 'django-admin startproject' using Django 3.2.5. @@ -40,7 +40,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'staticpages.apps.StaticpagesConfig', - 'albuns.apps.AlbunsConfig', # adicione esta linha + 'movies.apps.MoviesConfig', # adicione esta linha ] MIDDLEWARE = [ diff --git a/entrega2/urls.py b/entrega2/urls.py index 3e121dd..af49cbb 100644 --- a/entrega2/urls.py +++ b/entrega2/urls.py @@ -18,6 +18,6 @@ from django.urls import include, path urlpatterns = [ path('', include('staticpages.urls')), - path('albuns/', include('albuns.urls')), # adicionar esta linha + path('movies/', include('movies.urls')), # adicionar esta linha path('admin/', admin.site.urls), ] diff --git a/albuns/__init__.py b/movies/__init__.py similarity index 100% rename from albuns/__init__.py rename to movies/__init__.py diff --git a/albuns/admin.py b/movies/admin.py similarity index 60% rename from albuns/admin.py rename to movies/admin.py index a36e22a..97f7d58 100644 --- a/albuns/admin.py +++ b/movies/admin.py @@ -1,8 +1,8 @@ from django.contrib import admin -from .models import Album, Review, List, Provider +from .models import Movie, Review, List, Provider -admin.site.register(Album) +admin.site.register(Movie) admin.site.register(Review) admin.site.register(List) admin.site.register(Provider) diff --git a/albuns/apps.py b/movies/apps.py similarity index 64% rename from albuns/apps.py rename to movies/apps.py index 788f7ff..0a30ddd 100644 --- a/albuns/apps.py +++ b/movies/apps.py @@ -1,6 +1,6 @@ from django.apps import AppConfig -class AlbunsConfig(AppConfig): +class MoviesConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'albuns' + name = 'movies' diff --git a/albuns/forms.py b/movies/forms.py similarity index 82% rename from albuns/forms.py rename to movies/forms.py index 12e858c..68e58aa 100644 --- a/albuns/forms.py +++ b/movies/forms.py @@ -1,10 +1,10 @@ from django.forms import ModelForm -from .models import Album, Review, Provider +from .models import Movie, Review, Provider -class AlbumForm(ModelForm): +class MovieForm(ModelForm): class Meta: - model = Album + model = Movie fields = [ 'name', 'release_year', @@ -13,7 +13,7 @@ class AlbumForm(ModelForm): ] labels = { 'name': 'TÃtulo', - 'release_year': 'Ano de Lançamento', + 'release_year': 'Data de Lançamento', 'poster_url': 'URL do poster', 'info': 'Informações do Ãlbum' } @@ -28,7 +28,7 @@ class ReviewForm(ModelForm): ] labels = { 'author': 'Usuário', - 'text': 'Comentário', + 'text': 'Resenha', } diff --git a/movies/migrations/0001_initial.py b/movies/migrations/0001_initial.py new file mode 100644 index 0000000..e0def2e --- /dev/null +++ b/movies/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# Generated by Django 4.1.1 on 2022-11-06 10:05 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Movie', + fields=[ + ('id', models.BigAutoField(auto_created=True, + primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('release_year', models.IntegerField()), + ('poster_url', models.URLField(null=True)), + ], + ), + migrations.CreateModel( + name='Review', + fields=[ + ('id', models.BigAutoField(auto_created=True, + primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=255)), + ('likes', models.IntegerField(default=0)), + ('author', models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('movie', models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to='movies.movie')), + ], + ), + ] diff --git a/movies/migrations/0002_list.py b/movies/migrations/0002_list.py new file mode 100644 index 0000000..18d7013 --- /dev/null +++ b/movies/migrations/0002_list.py @@ -0,0 +1,25 @@ +# Generated by Django 4.1.1 on 2022-11-06 10:35 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('movies', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='List', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('movies', models.ManyToManyField(to='movies.movie')), + ], + ), + ] diff --git a/movies/migrations/0003_provider.py b/movies/migrations/0003_provider.py new file mode 100644 index 0000000..8b25e1c --- /dev/null +++ b/movies/migrations/0003_provider.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.1 on 2022-11-06 10:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('movies', '0002_list'), + ] + + operations = [ + migrations.CreateModel( + name='Provider', + fields=[ + ('movie', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='movies.movie')), + ('service', models.CharField(blank=True, max_length=255)), + ('has_flat_price', models.BooleanField(default=False)), + ('price', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)), + ], + ), + ] diff --git a/movies/migrations/0004_movie_info_movie_post_date.py b/movies/migrations/0004_movie_info_movie_post_date.py new file mode 100644 index 0000000..f9ea2c3 --- /dev/null +++ b/movies/migrations/0004_movie_info_movie_post_date.py @@ -0,0 +1,25 @@ +# Generated by Django 4.1.1 on 2022-11-06 12:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('movies', '0003_provider'), + ] + + operations = [ + migrations.AddField( + model_name='movie', + name='info', + field=models.CharField(default='no info', max_length=255), + preserve_default=False, + ), + migrations.AddField( + model_name='movie', + name='post_date', + field=models.DateTimeField(default='2022-11-06 00:00'), + preserve_default=False, + ), + ] diff --git a/movies/migrations/0005_alter_movie_info_alter_movie_post_date.py b/movies/migrations/0005_alter_movie_info_alter_movie_post_date.py new file mode 100644 index 0000000..fb57712 --- /dev/null +++ b/movies/migrations/0005_alter_movie_info_alter_movie_post_date.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.1 on 2022-11-06 12:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('movies', '0004_movie_info_movie_post_date'), + ] + + operations = [ + migrations.AlterField( + model_name='movie', + name='info', + field=models.CharField(max_length=255000), + ), + migrations.AlterField( + model_name='movie', + name='post_date', + field=models.DateTimeField(max_length=255), + ), + ] diff --git a/albuns/migrations/__init__.py b/movies/migrations/__init__.py similarity index 100% rename from albuns/migrations/__init__.py rename to movies/migrations/__init__.py diff --git a/albuns/models.py b/movies/models.py similarity index 75% rename from albuns/models.py rename to movies/models.py index fa49bb9..f4841c0 100644 --- a/albuns/models.py +++ b/movies/models.py @@ -2,11 +2,11 @@ from django.db import models from django.conf import settings -class Album(models.Model): +class Movie(models.Model): name = models.CharField(max_length=255) release_year = models.IntegerField() poster_url = models.URLField(max_length=200, null=True) - post_date = models.DateTimeField(auto_now=True) + post_date = models.DateTimeField(max_length=255) info = models.CharField(max_length=255000) def __str__(self): @@ -14,13 +14,11 @@ class Album(models.Model): class Review(models.Model): - author = models.ForeignKey( - settings.AUTH_USER_MODEL, - on_delete=models.CASCADE, - ) - post_date = models.DateTimeField(auto_now=True) + author = models.ForeignKey(settings.AUTH_USER_MODEL, + on_delete=models.CASCADE) text = models.CharField(max_length=255) - album = models.ForeignKey(Album, on_delete=models.CASCADE) + likes = models.IntegerField(default=0) + movie = models.ForeignKey(Movie, on_delete=models.CASCADE) def __str__(self): return f'"{self.text}" - {self.author.username}' @@ -30,15 +28,15 @@ class List(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) name = models.CharField(max_length=255) - albuns = models.ManyToManyField(Album) + movies = models.ManyToManyField(Movie) def __str__(self): return f'{self.name} by {self.author}' class Provider(models.Model): - album = models.OneToOneField( - Album, + movie = models.OneToOneField( + Movie, on_delete=models.CASCADE, primary_key=True, ) diff --git a/movies/temp_data.py b/movies/temp_data.py new file mode 100644 index 0000000..f4eb866 --- /dev/null +++ b/movies/temp_data.py @@ -0,0 +1,866 @@ + +movie_data = [{ + "id": + "1", + "name": + "The Shawshank Redemption", + "release_year": + "1994", + "poster_url": + "https://image.tmdb.org/t/p/w500/q6y0Go1tsGEsmtFryDOJo3dEmqu.jpg" +}, { + "id": + "2", + "name": + "The Godfather", + "release_year": + "1972", + "poster_url": + "https://image.tmdb.org/t/p/w500/3bhkrj58Vtu7enYsRolD1fZdja1.jpg" +}, { + "id": + "3", + "name": + "Schindler's List", + "release_year": + "1993", + "poster_url": + "https://image.tmdb.org/t/p/w500/sF1U4EUQS8YHUYjNl3pMGNIQyr0.jpg" +}, { + "id": + "4", + "name": + "Black Beauty", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/5ZjMNJJabwBEnGVQoR2yoMEL9um.jpg" +}, { + "id": + "5", + "name": + "The Godfather: Part II", + "release_year": + "1974", + "poster_url": + "https://image.tmdb.org/t/p/w500/hek3koDUyRQk7FIhPXsa6mT2Zc3.jpg" +}, { + "id": + "6", + "name": + "Your Name.", + "release_year": + "2016", + "poster_url": + "https://image.tmdb.org/t/p/w500/q719jXXEzOoYaps6babgKnONONX.jpg" +}, { + "id": + "7", + "name": + "Spirited Away", + "release_year": + "2001", + "poster_url": + "https://image.tmdb.org/t/p/w500/39wmItIWsg5sZMyRUHLkWBcuVCM.jpg" +}, { + "id": + "8", + "name": + "Hope", + "release_year": + "2013", + "poster_url": + "https://image.tmdb.org/t/p/w500/x9yjkm9gIz5qI5fJMUTfBnWiB2o.jpg" +}, { + "id": + "9", + "name": + "Parasite", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg" +}, { + "id": + "10", + "name": + "My Hero Academia: Heroes Rising", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/zGVbrulkupqpbwgiNedkJPyQum4.jpg" +}, { + "id": + "11", + "name": + "The Green Mile", + "release_year": + "1999", + "poster_url": + "https://image.tmdb.org/t/p/w500/velWPhVMQeQKcxggNEU8YmIo52R.jpg" +}, { + "id": + "12", + "name": + "12 Angry Men", + "release_year": + "1957", + "poster_url": + "https://image.tmdb.org/t/p/w500/ppd84D2i9W8jXmsyInGyihiSyqz.jpg" +}, { + "id": + "13", + "name": + "A Dog's Will", + "release_year": + "2000", + "poster_url": + "https://image.tmdb.org/t/p/w500/m8eFedsS7vQCZCS8WGp5n1bVD0q.jpg" +}, { + "id": + "14", + "name": + "Wolfwalkers", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/ehAKuE48okTuonq6TpsNQj8vFTC.jpg" +}, { + "id": + "15", + "name": + "Rascal Does Not Dream of a Dreaming Girl", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/pvdBzHOWjrLl69lUswPiVnI8szv.jpg" +}, { + "id": + "16", + "name": + "Pulp Fiction", + "release_year": + "1994", + "poster_url": + "https://image.tmdb.org/t/p/w500/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg" +}, { + "id": + "17", + "name": + "The Dark Knight", + "release_year": + "2008", + "poster_url": + "https://image.tmdb.org/t/p/w500/qJ2tW6WMUDux911r6m7haRef0WH.jpg" +}, { + "id": + "18", + "name": + "The Lord of the Rings: The Return of the King", + "release_year": + "2003", + "poster_url": + "https://image.tmdb.org/t/p/w500/rCzpDGLbOoPwLjy3OAm5NUPOTrC.jpg" +}, { + "id": + "19", + "name": + "Dedicated to my ex", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/xc4bTXVwYNXi10jG9dwcaYt5IpU.jpg" +}, { + "id": + "20", + "name": + "Forrest Gump", + "release_year": + "1994", + "poster_url": + "https://image.tmdb.org/t/p/w500/h5J4W4veyxMXDMjeNxZI46TsHOb.jpg" +}, { + "id": + "21", + "name": + "KonoSuba: God's Blessing on this Wonderful World! Legend of Crimson", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/j73LuQcA21KvkVFcroWWMN8tTJv.jpg" +}, { + "id": + "22", + "name": + "The Good, the Bad and the Ugly", + "release_year": + "1966", + "poster_url": + "https://image.tmdb.org/t/p/w500/usIXFgUP0Fjbwgeg2GwEOlAHSFM.jpg" +}, { + "id": + "23", + "name": + "Life Is Beautiful", + "release_year": + "1997", + "poster_url": + "https://image.tmdb.org/t/p/w500/74hLDKjD5aGYOotO6esUVaeISa2.jpg" +}, { + "id": + "24", + "name": + "Cinema Paradiso", + "release_year": + "1988", + "poster_url": + "https://image.tmdb.org/t/p/w500/8SRUfRUi6x4O68n0VCbDNRa6iGL.jpg" +}, { + "id": + "25", + "name": + "Seven Samurai", + "release_year": + "1954", + "poster_url": + "https://image.tmdb.org/t/p/w500/8OKmBV5BUFzmozIC3pPWKHy17kx.jpg" +}, { + "id": + "26", + "name": + "GoodFellas", + "release_year": + "1990", + "poster_url": + "https://image.tmdb.org/t/p/w500/6QMSLvU5ziIL2T6VrkaKzN2YkxK.jpg" +}, { + "id": + "27", + "name": + "Once Upon a Time in America", + "release_year": + "1984", + "poster_url": + "https://image.tmdb.org/t/p/w500/i0enkzsL5dPeneWnjl1fCWm6L7k.jpg" +}, { + "id": + "28", + "name": + "Hamilton", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/h1B7tW0t399VDjAcWJh8m87469b.jpg" +}, { + "id": + "29", + "name": + "Life in a Year", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/bP7u19opmHXYeTCUwGjlLldmUMc.jpg" +}, { + "id": + "30", + "name": + "Psycho", + "release_year": + "1960", + "poster_url": + "https://image.tmdb.org/t/p/w500/AiLmJibnhIMDeWVE9lR747yOgq1.jpg" +}, { + "id": + "31", + "name": + "Harakiri", + "release_year": + "1962", + "poster_url": + "https://image.tmdb.org/t/p/w500/fRqVjso3rdEcxZHXWE2xazDAtjI.jpg" +}, { + "id": + "32", + "name": + "Fight Club", + "release_year": + "1999", + "poster_url": + "https://image.tmdb.org/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg" +}, { + "id": + "33", + "name": + "Clouds", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/d0OdD1I8qAfETvE9Rp9Voq7R8LR.jpg" +}, { + "id": + "34", + "name": + "One Flew Over the Cuckoo's Nest", + "release_year": + "1975", + "poster_url": + "https://image.tmdb.org/t/p/w500/3jcbDmRFiQ83drXNOvRDeKHxS0C.jpg" +}, { + "id": + "35", + "name": + "A Silent Voice: The Movie", + "release_year": + "2016", + "poster_url": + "https://image.tmdb.org/t/p/w500/tuFaWiqX0TXoWu7DGNcmX3UW7sT.jpg" +}, { + "id": + "36", + "name": + "Hotarubi no Mori e", + "release_year": + "2011", + "poster_url": + "https://image.tmdb.org/t/p/w500/mDqzHV8UXWWNpZkoAbKmKX1ZxEE.jpg" +}, { + "id": + "37", + "name": + "City of God", + "release_year": + "2002", + "poster_url": + "https://image.tmdb.org/t/p/w500/k7eYdWvhYQyRQoU2TB2A2Xu2TfD.jpg" +}, { + "id": + "38", + "name": + "Grave of the Fireflies", + "release_year": + "1988", + "poster_url": + "https://image.tmdb.org/t/p/w500/qG3RYlIVpTYclR9TYIsy8p7m7AT.jpg" +}, { + "id": + "39", + "name": + "Zack Snyder's Justice League", + "release_year": + "2021", + "poster_url": + "https://image.tmdb.org/t/p/w500/tnAuB8q5vv7Ax9UAEje5Xi4BXik.jpg" +}, { + "id": + "40", + "name": + "Spider-Man: Into the Spider-Verse", + "release_year": + "2018", + "poster_url": + "https://image.tmdb.org/t/p/w500/iiZZdoQBEYBv6id8su7ImL0oCbD.jpg" +}, { + "id": + "41", + "name": + "New Gods: Nezha Reborn", + "release_year": + "2021", + "poster_url": + "https://image.tmdb.org/t/p/w500/6goDkAD6J3br81YMQf0Gat8Bqjy.jpg" +}, { + "id": + "42", + "name": + "Steven Universe: The Movie", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/8mRgpubxHqnqvENK4Bei30xMDvy.jpg" +}, { + "id": + "43", + "name": + "Maquia: When the Promised Flower Blooms", + "release_year": + "2018", + "poster_url": + "https://image.tmdb.org/t/p/w500/hL3NqRE2ccR4Y2sYSJTrmalRjrz.jpg" +}, { + "id": + "44", + "name": + "Howl's Moving Castle", + "release_year": + "2004", + "poster_url": + "https://image.tmdb.org/t/p/w500/TkTPELv4kC3u1lkloush8skOjE.jpg" +}, { + "id": + "45", + "name": + "Sunset Boulevard", + "release_year": + "1950", + "poster_url": + "https://image.tmdb.org/t/p/w500/zt8aQ6ksqK6p1AopC5zVTDS9pKT.jpg" +}, { + "id": + "46", + "name": + "The Art of Racing in the Rain", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/mi5VN4ww0JZgRFJIaPxxTGKjUg7.jpg" +}, { + "id": + "47", + "name": + "Cruella", + "release_year": + "2021", + "poster_url": + "https://image.tmdb.org/t/p/w500/wToO8opxkGwKgSfJ1JK8tGvkG6U.jpg" +}, { + "id": + "48", + "name": + "Demon Slayer -Kimetsu no Yaiba- The Movie: Mugen Train", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/h8Rb9gBr48ODIwYUttZNYeMWeUU.jpg" +}, { + "id": + "49", + "name": + "Neon Genesis Evangelion: The End of Evangelion", + "release_year": + "1997", + "poster_url": + "https://image.tmdb.org/t/p/w500/m9PTii0XWCIKZBBrCrOn8RLTK0w.jpg" +}, { + "id": + "50", + "name": + "Justice League Dark: Apokolips War", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/c01Y4suApJ1Wic2xLmaq1QYcfoZ.jpg" +}, { + "id": + "51", + "name": + "Me contro Te: Il film - La vendetta del Signor S", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/sfeQTIRkJjWt8IPDSBcPqkrcaas.jpg" +}, { + "id": + "52", + "name": + "The Empire Strikes Back", + "release_year": + "1980", + "poster_url": + "https://image.tmdb.org/t/p/w500/7BuH8itoSrLExs2YZSsM01Qk2no.jpg" +}, { + "id": + "53", + "name": + "Whiplash", + "release_year": + "2014", + "poster_url": + "https://image.tmdb.org/t/p/w500/oPxnRhyAIzJKGUEdSiwTJQBa3NM.jpg" +}, { + "id": + "54", + "name": + "American History X", + "release_year": + "1998", + "poster_url": + "https://image.tmdb.org/t/p/w500/c2gsmSQ2Cqv8zosqKOCwRS0GFBS.jpg" +}, { + "id": + "55", + "name": + "The Pianist", + "release_year": + "2002", + "poster_url": + "https://image.tmdb.org/t/p/w500/enFfoFd3TYs6ttTxrBIfmecQPnz.jpg" +}, { + "id": + "56", + "name": + "Ikiru", + "release_year": + "1952", + "poster_url": + "https://image.tmdb.org/t/p/w500/dgNTS4EQDDVfkzJI5msKuHu2Ei3.jpg" +}, { + "id": + "57", + "name": + "The Great Dictator", + "release_year": + "1940", + "poster_url": + "https://image.tmdb.org/t/p/w500/1QpO9wo7JWecZ4NiBuu625FiY1j.jpg" +}, { + "id": + "58", + "name": + "City Lights", + "release_year": + "1931", + "poster_url": + "https://image.tmdb.org/t/p/w500/bXNvzjULc9jrOVhGfjcc64uKZmZ.jpg" +}, { + "id": + "59", + "name": + "Rear Window", + "release_year": + "1954", + "poster_url": + "https://image.tmdb.org/t/p/w500/qitnZcLP7C9DLRuPpmvZ7GiEjJN.jpg" +}, { + "id": + "60", + "name": + "The Lord of the Rings: The Fellowship of the Ring", + "release_year": + "2001", + "poster_url": + "https://image.tmdb.org/t/p/w500/6oom5QYQ2yQTMJIbnvbkBL9cHo6.jpg" +}, { + "id": + "61", + "name": + "High and Low", + "release_year": + "1963", + "poster_url": + "https://image.tmdb.org/t/p/w500/tgNjemQPG96uIezpiUiXFcer5ga.jpg" +}, { + "id": + "62", + "name": + "Five Feet Apart", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/kreTuJBkUjVWePRfhHZuYfhNE1T.jpg" +}, { + "id": + "63", + "name": + "Nobody", + "release_year": + "2021", + "poster_url": + "https://image.tmdb.org/t/p/w500/oBgWY00bEFeZ9N25wWVyuQddbAo.jpg" +}, { + "id": + "64", + "name": + "Princess Mononoke", + "release_year": + "1997", + "poster_url": + "https://image.tmdb.org/t/p/w500/jHWmNr7m544fJ8eItsfNk8fs2Ed.jpg" +}, { + "id": + "65", + "name": + "Inception", + "release_year": + "2010", + "poster_url": + "https://image.tmdb.org/t/p/w500/9gk7adHYeDvHkCSEqAvQNLV5Uge.jpg" +}, { + "id": + "66", + "name": + "Interstellar", + "release_year": + "2014", + "poster_url": + "https://image.tmdb.org/t/p/w500/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg" +}, { + "id": + "67", + "name": + "The Lord of the Rings: The Two Towers", + "release_year": + "2002", + "poster_url": + "https://image.tmdb.org/t/p/w500/5VTN0pR8gcqV3EPUHHfMGnJYN9L.jpg" +}, { + "id": + "68", + "name": + "Modern Times", + "release_year": + "1936", + "poster_url": + "https://image.tmdb.org/t/p/w500/7uoiKOEjxBBW0AgDGQWrlfGQ90w.jpg" +}, { + "id": + "69", + "name": + "Se7en", + "release_year": + "1995", + "poster_url": + "https://image.tmdb.org/t/p/w500/69Sns8WoET6CfaYlIkHbla4l7nC.jpg" +}, { + "id": + "70", + "name": + "Mortal Kombat Legends: Scorpion's Revenge", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/4VlXER3FImHeFuUjBShFamhIp9M.jpg" +}, { + "id": + "71", + "name": + "We All Loved Each Other So Much", + "release_year": + "1974", + "poster_url": + "https://image.tmdb.org/t/p/w500/zGGWYpiKNwjpKxelPxOMqJnUgDs.jpg" +}, { + "id": + "72", + "name": + "The Silence of the Lambs", + "release_year": + "1991", + "poster_url": + "https://image.tmdb.org/t/p/w500/rplLJ2hPcOQmkFhTqUte0MkEaO2.jpg" +}, { + "id": + "73", + "name": + "Doctor Who: The Day of the Doctor", + "release_year": + "2013", + "poster_url": + "https://image.tmdb.org/t/p/w500/qkhP3bhxQQjs1bGEWNts64DOUkK.jpg" +}, { + "id": + "74", + "name": + "Paths of Glory", + "release_year": + "1957", + "poster_url": + "https://image.tmdb.org/t/p/w500/l2IY0gOHHmCWM90LjteFssxIV1G.jpg" +}, { + "id": + "75", + "name": + "Dead Poets Society", + "release_year": + "1989", + "poster_url": + "https://image.tmdb.org/t/p/w500/ai40gM7SUaGA6fthvsd87o8IQq4.jpg" +}, { + "id": + "76", + "name": + "Léon: The Professional", + "release_year": + "1994", + "poster_url": + "https://image.tmdb.org/t/p/w500/hUJvnlCepB4xcp17E7Kc6unXgiS.jpg" +}, { + "id": + "77", + "name": + "Once Upon a Time in the West", + "release_year": + "1968", + "poster_url": + "https://image.tmdb.org/t/p/w500/qbYgqOczabWNn2XKwgMtVrntD6P.jpg" +}, { + "id": + "78", + "name": + "Come and See", + "release_year": + "1985", + "poster_url": + "https://image.tmdb.org/t/p/w500/90A8sXK9QZVJ7Rj8nLdsj5NuO5s.jpg" +}, { + "id": + "79", + "name": + "Mommy", + "release_year": + "2014", + "poster_url": + "https://image.tmdb.org/t/p/w500/iUN8FpWSjrHx0b8lPnBuIoLnd67.jpg" +}, { + "id": + "80", + "name": + "Tokyo Story", + "release_year": + "1953", + "poster_url": + "https://image.tmdb.org/t/p/w500/g2YbTYKpY7N2yDSk7BfXZ18I5QV.jpg" +}, { + "id": + "81", + "name": + "Sansho the Bailiff", + "release_year": + "1954", + "poster_url": + "https://image.tmdb.org/t/p/w500/6Ai1iAje7d59N7CnFZvb8zQACFH.jpg" +}, { + "id": + "82", + "name": + "The Legend of 1900", + "release_year": + "1998", + "poster_url": + "https://image.tmdb.org/t/p/w500/iOcbJ5pxokOPDRgieVDbsFMrCc6.jpg" +}, { + "id": + "83", + "name": + "The Handmaiden", + "release_year": + "2016", + "poster_url": + "https://image.tmdb.org/t/p/w500/xV3H7UmImtZ6adpwTbdOrZS0MvR.jpg" +}, { + "id": + "84", + "name": + "My Mom is a Character 3", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/zw77BFPGJ73Lig8GwRzYj1XHq53.jpg" +}, { + "id": + "85", + "name": + "Back to the Future", + "release_year": + "1985", + "poster_url": + "https://image.tmdb.org/t/p/w500/7lyBcpYB0Qt8gYhXYaEZUNlNQAv.jpg" +}, { + "id": + "86", + "name": + "Miracle in Cell No. 7", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/bOth4QmNyEkalwahfPCfiXjNh1r.jpg" +}, { + "id": + "87", + "name": + "Woman in the Dunes", + "release_year": + "1964", + "poster_url": + "https://image.tmdb.org/t/p/w500/rE6vtXBDXy3cjyFmxfsDese0Eo4.jpg" +}, { + "id": + "88", + "name": + "Stalker", + "release_year": + "1979", + "poster_url": + "https://image.tmdb.org/t/p/w500/lUE0Bp7wH0EterJ44qMRsqtKFnp.jpg" +}, { + "id": + "89", + "name": + "Klaus", + "release_year": + "2019", + "poster_url": + "https://image.tmdb.org/t/p/w500/q125RHUDgR4gjwh1QkfYuJLYkL.jpg" +}, { + "id": + "90", + "name": + "Miraculous World: New York, United HeroeZ", + "release_year": + "2020", + "poster_url": + "https://image.tmdb.org/t/p/w500/19kfvGktytDZInUmpv3WlaHoTxP.jpg" +}, { + "id": + "91", + "name": + "Bicycle Thieves", + "release_year": + "1948", + "poster_url": + "https://image.tmdb.org/t/p/w500/ihLPR2hiHljvvdTzHk6NeNTVMXf.jpg" +}, { + "id": + "92", + "name": + "Apocalypse Now", + "release_year": + "1979", + "poster_url": + "https://image.tmdb.org/t/p/w500/gQB8Y5RCMkv2zwzFHbUJX3kAhvA.jpg" +}, { + "id": + "93", + "name": + "Investigation of a Citizen Above Suspicion", + "release_year": + "1970", + "poster_url": + "https://image.tmdb.org/t/p/w500/vPTZwlq1IC4o1DCsEZEl2uGljzm.jpg" +}, { + "id": + "94", + "name": + "Persona", + "release_year": + "1966", + "poster_url": + "https://image.tmdb.org/t/p/w500/bdXbfUir63TQHA5NTNcXPICZCW8.jpg" +}, { + "id": + "95", + "name": + "The Hate U Give", + "release_year": + "2018", + "poster_url": + "https://image.tmdb.org/t/p/w500/2icwBom0t5nmOuZI9FVXF3gkMK0.jpg" +}, { + "id": + "96", + "name": + "Wolf Children", + "release_year": + "2012", + "poster_url": + "https://image.tmdb.org/t/p/w500/nqqovhsvsWbsb7LcGaIGDRZrwgB.jpg" +}] diff --git a/albuns/templates/albuns/create.html b/movies/templates/movies/create.html similarity index 75% rename from albuns/templates/albuns/create.html rename to movies/templates/movies/create.html index bc3436e..36b55b6 100644 --- a/albuns/templates/albuns/create.html +++ b/movies/templates/movies/create.html @@ -7,9 +7,9 @@ Criar Ãlbum {% block content %} <h2>Adicionar Ãlbum</h2> -<form action="{% url 'albuns:create' %}" method="post"> +<form action="{% url 'movies:create' %}" method="post"> {% csrf_token %} - {{ album_form.as_p }} + {{ movie_form.as_p }} {{ provider_form.as_p }} <button type="submit">Criar</button> </form> diff --git a/albuns/templates/albuns/create_list.html b/movies/templates/movies/create_list.html similarity index 79% rename from albuns/templates/albuns/create_list.html rename to movies/templates/movies/create_list.html index d1911fe..c1dc23e 100644 --- a/albuns/templates/albuns/create_list.html +++ b/movies/templates/movies/create_list.html @@ -7,7 +7,7 @@ Criar Ãlbum {% block content %} <h2>Criar Lista</h2> -<form action="{% url 'albuns:create-list' %}" method="post"> +<form action="{% url 'movies:create-list' %}" method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Criar</button> diff --git a/movies/templates/movies/delete.html b/movies/templates/movies/delete.html new file mode 100644 index 0000000..ae4528d --- /dev/null +++ b/movies/templates/movies/delete.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} + +{% block content %} +<form action="{% url 'movies:delete' movie.id %}" method="post"> + {% csrf_token %} + <p> + Você tem certeza que deseja apagar o álbum "{{ movie.name }} ({{ movie.release_year }})"? + </p> + <button type="submit">Apagar</button> +</form> + +{% endblock content %} \ No newline at end of file diff --git a/movies/templates/movies/detail.html b/movies/templates/movies/detail.html new file mode 100644 index 0000000..0dbc002 --- /dev/null +++ b/movies/templates/movies/detail.html @@ -0,0 +1,24 @@ +{% extends 'base.html' %} + +{% block title %} +{{ movie.name }} ({{ movie.release_year }} +{% endblock title %} + +{% block content %} +<h2>Detalhes do Ãlbum {{ movie.name }} ({{ movie.release_year }})</h2> + +<hr> + +<section class="dados-de-album"> + <img src="{{ movie.poster_url }}" alt="poster do album {{ movie.name}}"> + <ul> + <li>Nome: {{ movie.name }}</li> + <li>Ano de Lançamento: {{ movie.release_year }} </li> + <li>Data de Postagem: {{movie.post_date }} </li> + <li>Informação: {{movie.info }}</li> + <li><a href="{% url 'movies:update' movie.id %}">Editar</a></li> + <li><a href="{% url 'movies:delete' movie.id %}">Apagar</a></li> + </ul> +</section> + +{% endblock content %} \ No newline at end of file diff --git a/movies/templates/movies/index.html b/movies/templates/movies/index.html new file mode 100644 index 0000000..985eb9c --- /dev/null +++ b/movies/templates/movies/index.html @@ -0,0 +1,23 @@ +{% extends 'base.html' %} + +{% block content %} +<h2>Todos os Ãlbuns</h2> +<section> + <p>Muitos resultados? <a href="{% url 'movies:search' %}">Buscar Ãlbuns</a></p> + <p>Não encontrou o álbum? <a href="{% url 'movies:create' %}">Adicionar Novo Ãlbum</a></p> +</section> +{% if movie_list %} +<section class="lista-de-cards"> + {% for movie in movie_list %} + <article class="card"> + <a href="{% url 'movies:detail' movie.id %}"><img src="{{ movie.poster_url }}" + alt="poster do album {{ movie.name}}"></a> <!-- modifique esta linha --> + <p>{{ movie.name }} ({{ movie.release_year }})</p> + </article> + {% endfor %} +</section> +{% else %} +<p>Não foi encontrado nenhum album.</p> +{% endif %} + +{% endblock content %} \ No newline at end of file diff --git a/albuns/templates/albuns/lists.html b/movies/templates/movies/lists.html similarity index 59% rename from albuns/templates/albuns/lists.html rename to movies/templates/movies/lists.html index 307d7b7..f8c5809 100644 --- a/albuns/templates/albuns/lists.html +++ b/movies/templates/movies/lists.html @@ -15,18 +15,18 @@ Listas <h3>{{list.name}} (de {{ list.author }}) </h3> </header> <div class="lista-de-cards"> - {% for album in list.albuns.all %} + {% for movie in list.movies.all %} <div class="card"> - <a href="{% url 'albuns:detail' album.id %}"><img src="{{ album.poster_url }}" - alt="poster do álbum {{ album.name}}"></a> - <p>{{ album.name }} ({{ album.release_year }})</p> + <a href="{% url 'movies:detail' movie.id %}"><img src="{{ movie.poster_url }}" + alt="poster do álbum {{ movie.name}}"></a> + <p>{{ movie.name }} ({{ movie.release_year }})</p> </div> {% endfor %} </div> </article> {% endfor %} - <a href="{% url 'albuns:create-list' %}"><button>Crie sua Lista</button></a> + <a href="{% url 'movies:create-list' %}"><button>Crie sua Lista</button></a> </section> {% endblock content %} \ No newline at end of file diff --git a/movies/templates/movies/review.html b/movies/templates/movies/review.html new file mode 100644 index 0000000..d66faad --- /dev/null +++ b/movies/templates/movies/review.html @@ -0,0 +1,13 @@ +{% extends 'base.html' %} + +{% block content %} +<h2>Resenhar Ãlbum {{ movie.name }} ({{ movie.release_year }})</h2> + +<form action="{% url 'movies:review' movie.id %}" method="post"> + {% csrf_token %} + {{ form.as_p }} + <button type="submit">Postar Resenha</button> +</form> + +<p><a href="{% url 'movies:detail' movie.id %}">Voltar para a página do álbum</a></p> +{% endblock content %} \ No newline at end of file diff --git a/albuns/templates/albuns/search.html b/movies/templates/movies/search.html similarity index 67% rename from albuns/templates/albuns/search.html rename to movies/templates/movies/search.html index 3081b11..1ab5be4 100644 --- a/albuns/templates/albuns/search.html +++ b/movies/templates/movies/search.html @@ -2,7 +2,7 @@ {% block content %} <h2>Busca de Ãlbuns por Nome</h2> -<form action="{% url 'albuns:search' %}"> +<form action="{% url 'movies:search' %}"> <p> <label for="id_query">TÃtulo:</label> <input type="text" name="query" id="id_query" /> @@ -12,12 +12,12 @@ <h2>Resultado da Busca</h2> -{% if album_list %} +{% if movie_list %} <section class="lista-de-cards"> - {% for album in album_list %} + {% for movie in movie_list %} <article class="card"> - <img src="{{ album.poster_url }}" alt="poster do álbum {{ album.name}}"> - <p>{{ album.name }} ({{ album.release_year }})</p> + <img src="{{ movie.poster_url }}" alt="poster do álbum {{ movie.name}}"> + <p>{{ movie.name }} ({{ movie.release_year }})</p> </article> {% endfor %} </section> diff --git a/albuns/templates/albuns/update.html b/movies/templates/movies/update.html similarity index 58% rename from albuns/templates/albuns/update.html rename to movies/templates/movies/update.html index 4f319fc..1debedc 100644 --- a/albuns/templates/albuns/update.html +++ b/movies/templates/movies/update.html @@ -1,8 +1,8 @@ {% extends 'base.html' %} {% block content %} -<h2>Atualizar Dados do Ãlbum {{ album.name }}({{ album.release_year}})</h2> -<form method="POST" action="{% url 'albuns:update' album.id%}"> +<h2>Atualizar Dados do Ãlbum {{ movie.name }}({{ movie.release_year}})</h2> +<form method="POST" action="{% url 'movies:update' movie.id%}"> {% csrf_token %} {{ form.as_p }} <button type="submit">Atualizar</button> diff --git a/albuns/tests.py b/movies/tests.py similarity index 100% rename from albuns/tests.py rename to movies/tests.py diff --git a/movies/urls.py b/movies/urls.py new file mode 100644 index 0000000..24b06c7 --- /dev/null +++ b/movies/urls.py @@ -0,0 +1,17 @@ +from django.urls import path + +from . import views + +app_name = 'movies' +urlpatterns = [ + path('', views.MovieListView.as_view(), name='index'), # edite esta linha + path('search/', views.search_movies, name='search'), + path('create/', views.create_movie, name='create'), + path('<int:movie_id>/', views.detail_movie, + name='detail'), + path('update/<int:movie_id>/', views.update_movie, name='update'), + path('delete/<int:movie_id>/', views.delete_movie, name='delete'), + path('<int:movie_id>/review/', views.create_review, name='review'), + path('lists/', views.ListListView.as_view(), name='lists'), + path('lists/create', views.ListCreateView.as_view(), name='create-list'), +] diff --git a/movies/views.py b/movies/views.py new file mode 100644 index 0000000..3adf3b6 --- /dev/null +++ b/movies/views.py @@ -0,0 +1,116 @@ +from django.http import HttpResponseRedirect +from django.shortcuts import get_object_or_404, render +from django.urls import reverse, reverse_lazy +from django.views import generic + +from .forms import MovieForm, ProviderForm, ReviewForm +from .models import List, Movie, Provider, Review +from .temp_data import movie_data + + +def detail_movie(request, movie_id): + movie = get_object_or_404(Movie, pk=movie_id) + context = {'movie': movie} + return render(request, 'movies/detail.html', context) + + +class MovieListView(generic.ListView): + model = Movie + template_name = 'movies/index.html' + + +def search_movies(request): + context = {} + if request.GET.get('query', False): + search_term = request.GET['query'].lower() + movie_list = Movie.objects.filter(name__icontains=search_term) + context = {"movie_list": movie_list} + return render(request, 'movies/search.html', context) + + +def search_movies(request): + context = {} + if request.GET.get('query', False): + context = { + "movie_list": [ + m for m in movie_data + if request.GET['query'].lower() in m['name'].lower() + ] + } + # modifique esta linha + return render(request, 'movies/search.html', context) + + +def create_movie(request): + if request.method == 'POST': + movie_form = MovieForm(request.POST) + else: + movie_form = MovieForm() + context = {'movie_form': movie_form, } + return render(request, 'movies/create.html', context) + + +def update_movie(request, movie_id): + movie = get_object_or_404(Movie, pk=movie_id) + + if request.method == "POST": + form = MovieForm(request.POST) + if form.is_valid(): + movie.name = form.cleaned_data['name'] + movie.release_year = form.cleaned_data['release_year'] + movie.poster_url = form.cleaned_data['poster_url'] + movie.save() + return HttpResponseRedirect( + reverse('movies:detail', args=(movie.id, ))) + else: + form = MovieForm( + initial={ + 'name': movie.name, + 'release_year': movie.release_year, + 'poster_url': movie.poster_url + }) + + context = {'movie': movie, 'form': form} + return render(request, 'movies/update.html', context) + + +def delete_movie(request, movie_id): + movie = get_object_or_404(Movie, pk=movie_id) + + if request.method == "POST": + movie.delete() + return HttpResponseRedirect(reverse('movies:index')) + + context = {'movie': movie} + return render(request, 'movies/delete.html', context) + + +def create_review(request, movie_id): + movie = get_object_or_404(Movie, pk=movie_id) + if request.method == 'POST': + form = ReviewForm(request.POST) + if form.is_valid(): + review_author = form.cleaned_data['author'] + review_text = form.cleaned_data['text'] + review = Review(author=review_author, + text=review_text, + movie=movie) + review.save() + return HttpResponseRedirect( + reverse('movies:detail', args=(movie_id, ))) + else: + form = ReviewForm() + context = {'form': form, 'movie': movie} + return render(request, 'movies/review.html', context) + + +class ListListView(generic.ListView): + model = List + template_name = 'movies/lists.html' + + +class ListCreateView(generic.CreateView): + model = List + template_name = 'movies/create_list.html' + fields = ['name', 'author', 'movies'] + success_url = reverse_lazy('movies:lists') diff --git a/templates/base.html b/templates/base.html index 388e164..b803c05 100644 --- a/templates/base.html +++ b/templates/base.html @@ -24,8 +24,8 @@ </a> <nav id="navegacao-principal"> <ul> - <li><a href="{% url 'albuns:index' %}">Ãlbuns</a></li> - <li><a href="{% url 'albuns:lists' %}">Listas</a></li> <!-- adicionar esta linha --> + <li><a href="{% url 'movies:index' %}">Ãlbuns</a></li> + <li><a href="{% url 'movies:lists' %}">Listas</a></li> <!-- adicionar esta linha --> <li><a href="{% url 'about' %}">Sobre</a></li> </ul> </nav> -- GitLab