dirtycoder/pets

View on GitHub
pets/users/views.py

Summary

Maintainability
A
0 mins
Test Coverage
from password_reset.views import Recover, RecoverDone, Reset, ResetDone

from django.contrib import messages
from django.contrib.auth import authenticate, login
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.views import LoginView
from django.http.response import HttpResponseRedirect
from django.shortcuts import resolve_url
from django.urls import reverse, reverse_lazy
from django.utils.translation import ugettext as _
from django.views.generic import CreateView, DetailView, TemplateView, UpdateView

from users.forms import (
    LoginForm,
    RegisterForm,
    UpdateUserForm,
    UsersPasswordRecoveryForm,
    UsersPasswordResetForm,
)
from users.models import OwnerProfile


class RecoverView(Recover):
    template_name = "users/recover.html"
    form_class = UsersPasswordRecoveryForm
    success_url_name = "users:recover_password_sent"
    email_template_name = "users/recover_email.txt"
    search_fields = ["username", "email"]


class RecoverDoneView(RecoverDone):
    template_name = "users/recover.html"


class RecoverResetView(Reset):
    template_name = "users/reset.html"
    success_url = "users:recover_password_done"
    form_class = UsersPasswordResetForm
    token_expires = 3600 * 2


class RecoverResetDoneView(ResetDone):
    template_name = "users/reset_done.html"


class CreateUserView(CreateView):
    model = OwnerProfile
    form_class = RegisterForm
    template_name = "users/create.html"
    authenticated_redirect_url = reverse_lazy("meupet:index")

    msg = _(
        'Your account has been successfully created, access <a href="{0}">'
        "this page</a> and register the pet :)"
    )

    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated:
            return HttpResponseRedirect(resolve_url(self.authenticated_redirect_url))
        return super().dispatch(request, *args, **kwargs)

    def form_valid(self, form):
        form.instance.is_information_confirmed = True
        return super(CreateUserView, self).form_valid(form)

    def get_success_url(self):
        url = reverse("meupet:register")
        messages.success(self.request, self.msg.format(url))
        user = authenticate(
            username=self.request.POST.get("username"), password=self.request.POST.get("password1")
        )
        login(self.request, user)
        return reverse("meupet:index")


class EditUserProfileView(LoginRequiredMixin, UpdateView):
    template_name = "users/edit_profile.html"
    model = OwnerProfile
    form_class = UpdateUserForm

    def get_success_url(self):
        messages.success(self.request, _("Changes saved successfully."))
        return reverse("meupet:index")

    def get_object(self, queryset=None):
        return self.request.user


class UserLogin(LoginView):
    form_class = LoginForm
    template_name = "users/login.html"


class UserProfileView(LoginRequiredMixin, TemplateView):
    template_name = "users/profile.html"

    def get_context_data(self, **kwargs):
        context = super(UserProfileView, self).get_context_data(**kwargs)
        context["object"] = self.request.user
        context["pets"] = self.request.user.pet_set.all()
        return context


class ProfileDetailView(DetailView):
    template_name = "users/profile.html"
    model = OwnerProfile

    def get_context_data(self, **kwargs):
        context = super(ProfileDetailView, self).get_context_data(**kwargs)
        context["pets"] = self.object.pet_set.all()
        return context


def confirm_information(request):
    """This check that the user has confirmed the information and
    redirect to the correct view"""
    if request.user:
        if request.user.is_information_confirmed:
            return HttpResponseRedirect(reverse("meupet:index"))
        else:
            return HttpResponseRedirect(reverse("users:edit"))