from django.contrib.messages.views import SuccessMessageMixin from django.http import request from django.views.generic import ListView from django.views.generic.detail import DetailView from django.views.generic.edit import CreateView, DeleteView, FormView, UpdateView from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.forms import PasswordChangeForm from django.contrib.auth import get_user_model from django.http import HttpResponse from django.views import View from .forms import AnimalForm, UserRegistrationForm, UserUpdateForm from .models import Animal, TipoAnimal, Municipio User = get_user_model() class HomeView(LoginRequiredMixin, ListView): """ Clase para para la pagina home, donde podremos filtrar los datos segun los intereses del usuario """ template_name = "index.html" def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["tipo_de_animal"] = TipoAnimal.objects.all() context["municipios"] = Municipio.objects.all() return context def get_queryset(self): queryset = Animal.objects.all() tipo_de_animal = self.request.GET.get('tipo_de_animal') municipio = self.request.GET.get('municipio') fecha_perdida = self.request.GET.get('fecha_perdida') if tipo_de_animal: queryset = queryset.filter(tipo_de_animal__name__iexact=tipo_de_animal) if municipio: queryset = queryset.filter(municipio__name__iexact=municipio) if fecha_perdida: queryset = queryset.filter(fecha_perdida=fecha_perdida) return queryset class RegistroUsuario(SuccessMessageMixin, CreateView): """ Una vez validado el formulario nos reenvia al login para poder iniciar sesion con el nuevo usuario, y nos muestra un mensaje de operacion satisfactoria """ template_name = "register.html" form_class = UserRegistrationForm success_url = "/login" success_message = "Te has registrado correctamente ! Ahora puedes iniciar sesion." class ActualizarPerfil(LoginRequiredMixin, SuccessMessageMixin, UpdateView): """ Una vez actualizado el formulario con los nuevos cambios nos reenvia al perfil , y nos muestra un mensaje de operacion satisfactoria UpdateView-> Una vista que muestra un formulario para editar un objeto existente, volver a mostrar el formulario con errores de validación (si los hay) y guardar los cambios en el objeto. Esto utiliza un formulario generado automáticamente a partir de la clase de modelo del objeto (a menos que se especifique manualmente una clase de formulario). LoginRequiredMixin-> Si una vista usa esta combinación, todas las solicitudes de usuarios no autenticados serán redirigidas a la página de inicio de sesión o se mostrará un error HTTP 403 Prohibido, según el parámetro raise_exception. """ template_name = "profile.html" form_class = UserUpdateForm success_url = "/profile" success_message = "El perfil se ha actulizado perfectamente" def get_object(self): return self.request.user class CambiarContrasena(LoginRequiredMixin, SuccessMessageMixin, FormView): """ Una vez actualizado el formulario con los nuevos cambios nos reenvia al perfil , y nos muestra un mensaje de operacion satisfactoria """ template_name = "password_change.html" form_class = PasswordChangeForm success_url = "/profile" success_message = "La contraseña se ha actualizado correctamente" def get_form_kwargs(self, **kwargs): data = super(CambiarContrasena, self).get_form_kwargs(**kwargs) data['user'] = self.request.user return data class MiListaReportes(LoginRequiredMixin, ListView): """ LoginRequiredMixin-> Si una vista usa esta combinación, todas las solicitudes de usuarios no autenticados serán redirigidas a la página de inicio de sesión o se mostrará un error HTTP 403 Prohibido, según el parámetro raise_exception. """ template_name = "own_reports.html" def get_queryset(self): animales = Animal.objects.filter(user=self.request.user) return animales class CrearAnimal(LoginRequiredMixin, SuccessMessageMixin, CreateView): """ LoginRequiredMixin-> Si una vista usa esta combinación, todas las solicitudes de usuarios no autenticados serán redirigidas a la página de inicio de sesión o se mostrará un error HTTP 403 Prohibido, según el parámetro raise_exception. SuccessMessageMixin-> nos muestra un mensaje de operacion satisfactoria """ template_name = "create_animal.html" form_class = AnimalForm success_url = "/mis-reportes/" success_message = "El reporte se ha añadido correctamente" def form_valid(self, form): if form.is_valid(): animal_obj = form.save(commit=False) animal_obj.user = self.request.user animal_obj.save() return super().form_valid(form) class DetallesAnimal(LoginRequiredMixin, DetailView): """ Nos permite ver los detalles de un animal en concreto LoginRequiredMixin-> Si una vista usa esta combinación, todas las solicitudes de usuarios no autenticados serán redirigidas a la página de inicio de sesión o se mostrará un error HTTP 403 Prohibido, según el parámetro raise_exception. DetailView -> Mientras se ejecuta esta vista, self.object contendrá el objeto sobre el que está operando la vista. """ template_name = "animal_detail.html" queryset = Animal.objects.all() class ActualizarAnimal(LoginRequiredMixin, SuccessMessageMixin, UpdateView): """ Nos permite actualicar los datos de un animal en concreto LoginRequiredMixin-> Si una vista usa esta combinación, todas las solicitudes de usuarios no autenticados serán redirigidas a la página de inicio de sesión o se mostrará un error HTTP 403 Prohibido, según el parámetro raise_exception. UpdateView -> Una vista que muestra un formulario para editar un objeto existente, volver a mostrar el formulario con errores de validación (si los hay) y guardar los cambios en el objeto. Esto utiliza un formulario generado automáticamente a partir de la clase de modelo del objeto (a menos que se especifique manualmente una clase de formulario). SuccessMessageMixin-> nos muestra un mensaje de operacion satisfactoria """ template_name = "update_animal.html" form_class = AnimalForm success_url = "/mis-reportes/" success_message = "El reporte se ha actualizado correctamente" def get_queryset(self): return Animal.objects.filter(user=self.request.user) class BorrarAnimal(LoginRequiredMixin, DeleteView): """ Nos permite borrar los datos de un animal en concreto, despues nos reenvia a la zona de mis reportes para poder seguir operando. LoginRequiredMixin-> Si una vista usa esta combinación, todas las solicitudes de usuarios no autenticados serán redirigidas a la página de inicio de sesión o se mostrará un error HTTP 403 Prohibido, según el parámetro raise_exception. DeleteView-> Una vista que muestra una página de confirmación y elimina un objeto existente. El objeto dado solo se eliminará si el método de solicitud es POST. Si esta vista se obtiene a través de GET, mostrará una página de confirmación que debe contener un formulario que se envía a la misma URL. """ template_name = "animal_delete_confirm.html" success_url = "/mis-reportes/" def get_queryset(self): return Animal.objects.filter(user=self.request.user) """ Revisar class GenerarVistaPdf(View): def get (self, request, *args, **kwargs): return HttpResponse('Hello world!') """