gulasch-r0mstore/users/views.py

100 lines
2.8 KiB
Python

from django.views.generic.edit import CreateView, UpdateView
from django.views.generic.base import TemplateView
from django.contrib.auth import get_user_model
from django.urls import reverse
from django.contrib.auth.tokens import default_token_generator
from django.template import loader
from django.utils.http import int_to_base36
from django.http import Http404
from django.core.exceptions import PermissionDenied
from django.conf import settings
from users.forms import UserCreateForm, UserUpdateForm
class UserCreateView(CreateView):
model = get_user_model()
form_class = UserCreateForm
template_name = 'users/signup.html'
def get_success_url(self):
return reverse('send_confirmation', kwargs={'user_id' : self.object.pk})
class UserUpdateView(UpdateView):
model = get_user_model()
form_class = UserUpdateForm
template_name = 'users/user_update.html'
pk_url_kwarg = 'user_id'
def get_queryset(self):
return self.model.objects.filter(id=self.request.user.id)
def get_success_url(self):
return reverse('romlist')
class SendConfirmationView(TemplateView):
template_name = 'users/send_confirmation.html'
email_template_name = 'users/confirmation_email.txt'
def get_context_data(self, **kwargs):
context = super(SendConfirmationView, self).get_context_data(**kwargs)
context['confirm_user'] = get_user_model().objects.get(id=kwargs['user_id'])
return context
def get(self, request, *args, **kwargs):
try:
user = get_user_model().objects.get(id=kwargs['user_id'])
except get_user_model().DoesNotExist:
raise Http404
if user.is_active:
raise Http404
uid = int_to_base36(user.pk)
token = default_token_generator.make_token(user)
link = request.build_absolute_uri(reverse('check_confirmation', kwargs={'user_id' : user.pk, 'token' : token}))
context = {
'email': user.email,
'validation_link': link,
'user': user
}
subject = u"%s Bestätige deine Registrierung" % settings.EMAIL_SUBJECT_PREFIX
email = loader.render_to_string(self.email_template_name, context)
user.email_user(subject,email)
return super(SendConfirmationView,self).get(self, request, *args, **kwargs)
class CheckConfirmationView(TemplateView):
template_name = 'users/check_confirmation.html'
def get_context_data(self, **kwargs):
context = super(CheckConfirmationView, self).get_context_data(**kwargs)
context['confirm_user'] = get_user_model().objects.get(id=kwargs['user_id'])
return context
def get(self, request, *args, **kwargs):
try:
user = get_user_model().objects.get(id=kwargs['user_id'])
except get_user_model().DoesNotExist:
raise Http404
if user.is_active:
raise Http404
if not default_token_generator.check_token(user,kwargs['token']):
raise Http404
user.is_active = True
user.save()
print("Acitvating %s" % user.username)
return super(CheckConfirmationView,self).get(self, request, *args, **kwargs)