from django.views import View from django.views.generic.edit import CreateView from django.contrib.messages.views import SuccessMessageMixin from django.contrib import messages from django.urls import reverse_lazy from django.shortcuts import render, redirect from django.http import HttpResponseForbidden from lostplaces_app.forms import ExplorerCreationForm, TagSubmitForm from lostplaces_app.models import Place, PhotoAlbum from lostplaces_app.views.base_views import IsAuthenticated from lostplaces_app.views.base_views import ( PlaceAssetCreateView, PlaceAssetDeleteView, ) from taggit.models import Tag class SignUpView(SuccessMessageMixin, CreateView): form_class = ExplorerCreationForm success_url = reverse_lazy('login') template_name = 'signup.html' success_message = 'User created.' class HomeView(View): def get(self, request, *args, **kwargs): place_list = Place.objects.all().order_by('-submitted_when')[:10] place_map_center = Place.average_latlon(place_list) context = { 'place_list': place_list, 'place_map_center': place_map_center } return render(request, 'home.html', context) class PhotoAlbumCreateView(PlaceAssetCreateView): model = PhotoAlbum fields = ['url', 'label'] template_name = 'photo_album/photo_album_create.html' success_message = 'Photo Album submitted' class PhotoAlbumDeleteView(PlaceAssetDeleteView): model = PhotoAlbum pk_url_kwarg = 'pk' success_message = 'Photo Album deleted' permission_denied_messsage = 'You do not have permissions to alter this photo album' class PlaceTagSubmitView(IsAuthenticated, View): def post(self, request, place_id, *args, **kwargs): place = Place.objects.get(pk=place_id) form = TagSubmitForm(request.POST) if form.is_valid(): tag_list_raw = form.cleaned_data['tag_list'] tag_list_raw = tag_list_raw.strip().split(',') tag_list = [] for tag in tag_list_raw: tag_list.append(tag.strip()) place.tags.add(*tag_list) place.save() return redirect(reverse_lazy('place_detail', kwargs={'pk': place.id})) class PlaceTagDeleteView(IsAuthenticated, View): def get(self, request, tagged_id, tag_id, *args, **kwargs): place = Place.objects.get(pk=tagged_id) tag = Tag.objects.get(pk=tag_id) place.tags.remove(tag) return redirect(reverse_lazy('place_detail', kwargs={'pk': tagged_id}))