diff --git a/src/account/templates/change_password.html b/src/account/templates/change_password.html index dc341f9..7b8fbf1 100644 --- a/src/account/templates/change_password.html +++ b/src/account/templates/change_password.html @@ -8,7 +8,6 @@
{% csrf_token %} - {{form.media}} {{form|crispy}} - +
{% endblock content %} diff --git a/src/account/templates/register.html b/src/account/templates/register.html index f789d2c..abbf6d9 100644 --- a/src/account/templates/register.html +++ b/src/account/templates/register.html @@ -9,7 +9,6 @@
{% csrf_token %} - {{form.media}} {{form|crispy}} Get API Key
+ +
+ +{% endblock content %} \ No newline at end of file diff --git a/src/series/templates/update_series.html b/src/series/templates/update_series.html new file mode 100644 index 0000000..4b7124d --- /dev/null +++ b/src/series/templates/update_series.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} +{% load crispy_forms_tags %} + + +{% block title %} Update Series {% endblock title %} + +{% block content %} + +
+ {% csrf_token %} + {{form|crispy}} + +
+ +{% endblock content %} + \ No newline at end of file diff --git a/src/series/urls.py b/src/series/urls.py index 494afb9..5985a78 100644 --- a/src/series/urls.py +++ b/src/series/urls.py @@ -5,4 +5,6 @@ from series import views urlpatterns = [ path('', views.homepage_view, name='homepage'), path('series/add', views.AddSeriesView.as_view(), name='add-series'), + path('series/update/', views.UpdateSeriesView.as_view(), name='update-series'), + path('series/delete/', views.SeriesDeleteView.as_view(), name='delete-series'), ] \ No newline at end of file diff --git a/src/series/views/__init__.py b/src/series/views/__init__.py index 4a0c3a2..000530d 100644 --- a/src/series/views/__init__.py +++ b/src/series/views/__init__.py @@ -1,2 +1,4 @@ from .homepage import homepage_view -from .add_series import AddSeriesView \ No newline at end of file +from .add_series import AddSeriesView +from .update_series import UpdateSeriesView +from .delete_series import SeriesDeleteView \ No newline at end of file diff --git a/src/series/views/add_series.py b/src/series/views/add_series.py index 3c55c0d..0d231fa 100644 --- a/src/series/views/add_series.py +++ b/src/series/views/add_series.py @@ -24,7 +24,7 @@ class AddSeriesView(LoginRequiredMixin, CreateView): raw_data = get(f"https://imdb-api.com/en/API/Title/{series.user.imdb_api_key}/{series.imdb_id}") if raw_data.status_code != 200: - messages.info(self.request, 'TV Series no added. Please try again.') + messages.info(self.request, 'TV Series can not added. Please try again.') return redirect('add-series') data = raw_data.json() @@ -49,5 +49,4 @@ class AddSeriesView(LoginRequiredMixin, CreateView): series.save() form.save_m2m() - return super().form_valid(form) diff --git a/src/series/views/delete_series.py b/src/series/views/delete_series.py new file mode 100644 index 0000000..f5f69c6 --- /dev/null +++ b/src/series/views/delete_series.py @@ -0,0 +1,17 @@ +from series.models import SeriesModel +from django.views.generic import DeleteView +from django.urls import reverse_lazy, reverse +from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib import messages + + +class SeriesDeleteView(LoginRequiredMixin, DeleteView): + login_url = reverse_lazy('login') + template_name = 'article_deletion_confirmation.html' + + def get_success_url(self): + messages.success(self.request, 'Series Deleted') + return reverse('homepage') + + def get_queryset(self): + return SeriesModel.objects.filter(slug=self.kwargs['slug'], user=self.request.user) \ No newline at end of file diff --git a/src/series/views/update_series.py b/src/series/views/update_series.py new file mode 100644 index 0000000..40ef7c7 --- /dev/null +++ b/src/series/views/update_series.py @@ -0,0 +1,56 @@ +from series.models import SeriesModel +from django.views.generic import UpdateView +from django.urls import reverse, reverse_lazy +from django.contrib.auth.mixins import LoginRequiredMixin +from django.contrib import messages +from django.shortcuts import (get_object_or_404, + redirect) +from requests import get + + +class UpdateSeriesView(LoginRequiredMixin, UpdateView): + login_url = reverse_lazy('login') + template_name = 'update_series.html' + fields = ('title', 'imdb_id', 'last_season', 'last_episode', 'show') + + def get_object(self): + return get_object_or_404(SeriesModel, slug=self.kwargs.get('slug'), user=self.request.user) + + def get_success_url(self): + messages.success(self.request, 'Series Updated') + return reverse('homepage') + + def form_valid(self, form): + series = form.save(commit=False) + series.user = self.request.user + + raw_data = get(f"https://imdb-api.com/en/API/Title/{series.user.imdb_api_key}/{series.imdb_id}") + + if raw_data.status_code != 200: + messages.info(self.request, 'TV Series can not updated. Please try again.') + return redirect('add-series') + data = raw_data.json() + + if data['errorMessage']: + form.add_error('imdb_id', 'ID is not correct.') + return self.form_invalid(form) + + if not data['tvSeriesInfo']: + form.add_error('imdb_id', 'This is not a TV series id.') + return self.form_invalid(form) + seasons = data['tvSeriesInfo']['seasons'] + + if str(series.last_season) not in seasons: + form.add_error('last_season', 'The season number is not correct.') + return self.form_invalid(form) + + data = get(f"https://imdb-api.com/en/API/SeasonEpisodes/{series.user.imdb_api_key}/{series.imdb_id}/{series.last_season}").json() + episodes_count = len(data['episodes']) + if series.last_episode > episodes_count: + form.add_error('last_episode', 'The episode number is not correct.') + return self.form_invalid(form) + + series.save() + form.save_m2m() + return super().form_valid(form) + diff --git a/src/templates/components/navbar.html b/src/templates/components/navbar.html index b121c0f..d2b15f4 100644 --- a/src/templates/components/navbar.html +++ b/src/templates/components/navbar.html @@ -13,6 +13,11 @@ {% if request.user.is_authenticated == True %}