views.py
from django.shortcuts import render
from django.core.mail import send_mail
from django.urls import reverse_lazy, reverse
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpResponseRedirect
from django.views.generic import (
View,
CreateView
)
from django.views.generic.edit import (
FormView
)
from .forms import (
UserRegisterForm,
LoginForm,
UpdatePasswordForm,
VerificationForm
)
#
from .models import User
#
from .functions import code_generator
class UserRegisterView(FormView):
template_name = 'users/register.html'
form_class = UserRegisterForm
success_url = '/'
def form_valid(self, form):
# generamos el codigo
codigo = code_generator()
#
usuario = User.objects.create_user(
form.cleaned_data['username'],
form.cleaned_data['email'],
form.cleaned_data['password1'],
nombres=form.cleaned_data['nombres'],
apellidos=form.cleaned_data['apellidos'],
genero=form.cleaned_data['genero'],
codregistro=codigo
)
# enviar el codigo al email del user
asunto = 'Confrimacion d eemail'
mensaje = 'Codigo de verificacion: ' + codigo
email_remitente = 'roberthbardales@gmail.com'
#
send_mail(asunto, mensaje, email_remitente, [form.cleaned_data['email'],])
# redirigir a pantalla de valdiacion
return HttpResponseRedirect(
reverse(
'users_app:user-verification',
kwargs={'pk': usuario.id}
)
)
class CodeVerificationView(FormView):
template_name = 'users/verification.html'
form_class = VerificationForm
success_url = reverse_lazy('users_app:user-login')
def get_form_kwargs(self):
kwargs = super(CodeVerificationView, self).get_form_kwargs()
kwargs.update({
'pk': self.kwargs['pk'],
})
return kwargs
def form_valid(self, form):
#
User.objects.filter(
id=self.kwargs['pk']
).update(
is_active=True
)
return super(CodeVerificationView, self).form_valid(form)
forms.py
class VerificationForm(forms.Form):
codregistro = forms.CharField(required=True)
def __init__(self, pk, *args, **kwargs):
self.id_user = pk
super(VerificationForm, self).__init__(*args, **kwargs)
def clean_codregistro(self):
codigo = self.cleaned_data['codregistro']
if len(codigo) == 6:
# verificamos si el codigo y el id de usuario son validos:
activo = User.objects.cod_validation(
self.id_user,
codigo
)
if not activo:
raise forms.ValidationError('el codigo es incorrecto')
else:
raise forms.ValidationError('el codigo es incorrecto')
managers.py
from django.db import models
#
from django.contrib.auth.models import BaseUserManager
class UserManager(BaseUserManager, models.Manager):
def _create_user(self, username, email, password, is_staff, is_superuser, is_active, **extra_fields):
user = self.model(
username=username,
email=email,
is_staff=is_staff,
is_superuser=is_superuser,
is_active=is_active,
**extra_fields
)
user.set_password(password)
user.save(using=self.db)
return user
def create_user(self, username, email, password=None, **extra_fields):
return self._create_user(username, email, password, False, False, False, **extra_fields)
def create_superuser(self, username, email, password=None, **extra_fields):
return self._create_user(username, email, password, True, True, True, **extra_fields)
def cod_validation(self, id_user, cod_registro):
if self.filter(id=id_user, codregistro=cod_registro).exists():
return True
else:
return False
urls.py
path(
'user-verification/<pk>/',
views.CodeVerificationView.as_view(),
name='user-verification',
),
Última modificación: 27 Dec 2022 13:22
No hay comentarios aún
Sé el primero en comentar este artículo