Registro con email
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from rest_framework import serializers
|
||||
from django.contrib.auth import get_user_model
|
||||
from allauth.account.models import EmailAddress
|
||||
from .models import ClientesA24
|
||||
|
||||
class ClientesA24Serailizer(serializers.ModelSerializer):
|
||||
@@ -8,4 +10,38 @@ class ClientesA24Serailizer(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
|
||||
@@ -7,6 +7,5 @@ urlpatterns = [
|
||||
path('create_Cliente/', views.ClientesIMMEX_CreateView.as_view(), name='ClientesIMMEX_Create'),
|
||||
path('checkRfcA24/', views.Check_IMMEX_RFC.as_view(), name='checkRfcA24' ),
|
||||
path('api/registro/', views.RegistroUsuarios.as_view(), name='api_registro'),
|
||||
|
||||
|
||||
path('api/login/', views.LoginIMMEX.as_view(), name='api_login'),
|
||||
]
|
||||
@@ -1,7 +1,11 @@
|
||||
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.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 .models import Sistemas_por_cliente_A24, ClientesA24
|
||||
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 import status
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from .serializers import SignupSerializer
|
||||
from Sistemas.permissions import ItsAdminToken, HasAuthorizationHeader
|
||||
|
||||
from django.utils import timezone
|
||||
|
||||
import urllib.parse
|
||||
import traceback
|
||||
|
||||
@@ -70,20 +77,47 @@ class ClientesIMMEX_CreateView(CreateView):
|
||||
return response
|
||||
|
||||
"""---------API VIEWS---------"""
|
||||
class LoginIMMEX(APIView):
|
||||
pass
|
||||
class RegistroUsuarios(APIView):
|
||||
permission_classes = [ItsAdminToken]
|
||||
|
||||
def post(self,request, *args, **kwargs):
|
||||
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):
|
||||
"""Verifica que el cliente pueda Timbrar"""
|
||||
permission_classes = [IsAuthenticated,ItsAdminToken]
|
||||
|
||||
Reference in New Issue
Block a user