Registro con email

This commit is contained in:
rexcom28
2023-05-25 12:31:24 -06:00
parent 050ea95e2d
commit 34a80e3556
3 changed files with 82 additions and 13 deletions

View File

@@ -1,4 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from django.contrib.auth import get_user_model
from allauth.account.models import EmailAddress
from .models import ClientesA24 from .models import ClientesA24
class ClientesA24Serailizer(serializers.ModelSerializer): class ClientesA24Serailizer(serializers.ModelSerializer):
@@ -8,4 +10,38 @@ class ClientesA24Serailizer(serializers.ModelSerializer):
class SerialiazerA24(serializers.ModelSerializer): class SerialiazerA24(serializers.ModelSerializer):
pass pass
User = get_user_model()
class SignupSerializer(serializers.Serializer):
password = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ['username', 'password', 'email', 'first_name', 'last_name']
def validate(self, data):
print(f'DATA {data}')
if data['password'] != data['password2']:
raise serializers.ValidationError("Las contraseñas no coinciden.")
return data
def create(self, validated_data):
print(f'CREATE {validated_data}')
password2 = validated_data.get('password2')
if password2:
validated_data.pop('password2')
# Asegurarse de tener el campo 'username' en validated_data
username = self.context['request'].data.get('username')
email = self.context['request'].data.get('email')
first_name = self.context['request'].data.get('first_name')
last_name = self.context['request'].data.get('last_name')
if not username:
raise serializers.ValidationError("El campo 'username' es requerido.")
# Crear el usuario con los datos validados
user = User.objects.create_user(username=username, password=validated_data['password'], email=email, first_name=first_name, last_name= last_name)
# Crea el objeto Email asociado al usuario
EmailAddress.objects.create(user=user, email=user.email, primary=True, verified=False)
return user

View File

@@ -7,6 +7,5 @@ urlpatterns = [
path('create_Cliente/', views.ClientesIMMEX_CreateView.as_view(), name='ClientesIMMEX_Create'), path('create_Cliente/', views.ClientesIMMEX_CreateView.as_view(), name='ClientesIMMEX_Create'),
path('checkRfcA24/', views.Check_IMMEX_RFC.as_view(), name='checkRfcA24' ), path('checkRfcA24/', views.Check_IMMEX_RFC.as_view(), name='checkRfcA24' ),
path('api/registro/', views.RegistroUsuarios.as_view(), name='api_registro'), path('api/registro/', views.RegistroUsuarios.as_view(), name='api_registro'),
path('api/login/', views.LoginIMMEX.as_view(), name='api_login'),
] ]

View File

@@ -1,7 +1,11 @@
from django.shortcuts import render from django.shortcuts import render
from allauth.account.views import SignupView
from allauth.account.models import EmailConfirmation, EmailAddress
from django.http import JsonResponse from django.http import JsonResponse
from django.urls import reverse_lazy from django.urls import reverse_lazy, reverse
from django.core.mail import send_mail
from Sistemas.models import Sistema, BitacoraErrores from Sistemas.models import Sistema, BitacoraErrores
from .models import Sistemas_por_cliente_A24, ClientesA24 from .models import Sistemas_por_cliente_A24, ClientesA24
from django.views.generic.edit import CreateView from django.views.generic.edit import CreateView
@@ -16,8 +20,11 @@ from rest_framework.views import APIView
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework import status
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from .serializers import SignupSerializer
from Sistemas.permissions import ItsAdminToken, HasAuthorizationHeader from Sistemas.permissions import ItsAdminToken, HasAuthorizationHeader
from django.utils import timezone
import urllib.parse import urllib.parse
import traceback import traceback
@@ -70,20 +77,47 @@ class ClientesIMMEX_CreateView(CreateView):
return response return response
"""---------API VIEWS---------""" """---------API VIEWS---------"""
class LoginIMMEX(APIView):
pass
class RegistroUsuarios(APIView): class RegistroUsuarios(APIView):
permission_classes = [ItsAdminToken] permission_classes = [ItsAdminToken]
def post(self,request, *args, **kwargs): def post(self,request, *args, **kwargs):
try: try:
signup_view = SignupView(request=request) print(request.data)
response = signup_view.dispatch(request)
if response.status_code == 302:
return Response({'message': 'Registro exitoso'})
else:
return Response({'message': 'Error de registro', 'errors': response.context_data['form'].errors})
except Exception as E:
return Response({'Error':f'Error al registro con datos del usuario {E}', 'isError':True})
serializer = SignupSerializer(data=request.data,context={'request':request})
if serializer.is_valid():
user = serializer.save()
# Generar la confirmación de correo electrónico
email_address = EmailAddress.objects.get(user=user, email=user.email)
email_confirmation = EmailConfirmation.create(email_address)
self.send_email_confirmation(request, email_confirmation)
return Response({'message': 'Registro exitoso'})
else:
print(f'SERIALIZER ERROR {serializer.errors}')
return Response({'message': 'Error de validación', 'errors': serializer.errors})
except Exception as E:
print(f'ERROR {E}')
return Response({'Error':f'Error al registro con datos del usuario {E}', 'isError':True})
def send_email_confirmation(self, request, email_confirmation):
email_address = email_confirmation.email_address
email = email_address.email
email_confirmation.sent = timezone.now()
email_confirmation.save()
email_confirmation_url = request.build_absolute_uri(reverse('account_confirm_email', args=[email_confirmation.key]))
message = f"Por favor, confirma tu correo electrónico en el siguiente enlace: {email_confirmation_url}"
send_mail(
subject='Confirmación de correo electrónico',
message=message,
from_email='aduanasoftpruebas@gmail.com',
recipient_list=[email],
)
class Check_IMMEX_RFC(APIView): class Check_IMMEX_RFC(APIView):
"""Verifica que el cliente pueda Timbrar""" """Verifica que el cliente pueda Timbrar"""
permission_classes = [IsAuthenticated,ItsAdminToken] permission_classes = [IsAuthenticated,ItsAdminToken]