Registro con email
This commit is contained in:
@@ -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):
|
||||||
@@ -9,3 +11,37 @@ 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
|
||||||
@@ -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'),
|
||||||
|
|
||||||
]
|
]
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
response = signup_view.dispatch(request)
|
|
||||||
if response.status_code == 302:
|
|
||||||
return Response({'message': 'Registro exitoso'})
|
return Response({'message': 'Registro exitoso'})
|
||||||
else:
|
else:
|
||||||
return Response({'message': 'Error de registro', 'errors': response.context_data['form'].errors})
|
print(f'SERIALIZER ERROR {serializer.errors}')
|
||||||
|
return Response({'message': 'Error de validación', 'errors': serializer.errors})
|
||||||
except Exception as E:
|
except Exception as E:
|
||||||
|
print(f'ERROR {E}')
|
||||||
return Response({'Error':f'Error al registro con datos del usuario {E}', 'isError':True})
|
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]
|
||||||
|
|||||||
Reference in New Issue
Block a user