added functionality to Serializer validate method
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user