added functionality to Serializer validate method

This commit is contained in:
fjrodriguez
2023-01-25 09:09:13 -06:00
parent 2e432ae674
commit 2f44b7d929
13 changed files with 367 additions and 20 deletions

View File

@@ -1,9 +1,11 @@
from django.db import models
from django.core.exceptions import ValidationError
from Clientes.models import Clientes
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from django.contrib.auth.models import BaseUserManager
import re
class Sistema(models.Model):
nombre_sistema= models.CharField(max_length=100, blank=False,null=False,unique=True)
@@ -18,10 +20,79 @@ class sistemas_por_cliente(models.Model):
num_licencias= models.IntegerField(default=1)
def __str__(self):
return self.cliente.Nombre
#{self.cliente.Nombre}-
return f'{self.id_sistema.nombre_sistema}'
class Meta:
ordering= ('-cliente','id_sistema')
class DeviceManager(BaseUserManager):
def generate_unique_username(self,client, device_name, ip_address):
username = f"Device_{client.RFC}_{device_name}_{ip_address}"
username_ = re.sub(r'\W+', '', username)
if User.objects.filter(username=username_).exists():
raise ValidationError(f"El Usuario ya existe {username_}")
return username_
def create_user(self,client, device_name, device_os, ip_address ):
user_= User.objects.create_user(
username=self.generate_unique_username(client,device_name,ip_address)
)
device =self.model(
client=client,
device_name= device_name,
device_os=device_os,
ip_address=ip_address,
username=user_
)
device.save()
Token.objects.create(user=user_)
DeviceHistory.objects.create(device=device)
return device
class Device(models.Model):
client = models.ForeignKey(Clientes,on_delete=models.CASCADE)
device_name = models.CharField(max_length=255)
device_os = models.CharField(max_length=255)
ip_address= models.GenericIPAddressField()
token = models.OneToOneField(Token, on_delete=models.CASCADE, blank=True,null=True)
username = models.OneToOneField(User, on_delete=models.CASCADE)
sistema = models.ForeignKey(Sistema,on_delete=models.CASCADE, blank=True, null=True)
#objects = DeviceManager()
def generate_unique_username(self,client, device_name,ip_address):
username = f"Device_{client.RFC}_{device_name}_{ip_address}"
username_ = re.sub(r'\W+', '', username)
if User.objects.filter(username=username_).exists():
raise ValidationError(f"El Usuario ya existe {username_}")
obj= User.objects.create_user(
username=username_
)
return obj
def save(self, *args, **kwargs):
if not self.pk:
obj = self.generate_unique_username(self.client,self.device_name, self.ip_address)
self.username= obj
token= Token.objects.create(user=obj)
self.token=token
super().save(*args, **kwargs)
DeviceHistory.objects.create(device=self,ip_address=self.ip_address)
def __str__(self):
return f'{self.username}'
class DeviceHistory(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
first_authentication = models.DateTimeField(auto_now_add=True)
last_authentication = models.DateTimeField(auto_now=True)
ip_address = models.GenericIPAddressField()
class Maquinas_Conectadas(models.Model):