validaciones se realiza a nivel de model

develop/Rodrigo/Backend
Francisco Sandoval 2023-07-17 15:43:15 -04:00
parent 7948c00e9d
commit 3953603b06
4 changed files with 43 additions and 25 deletions

View File

@ -5,7 +5,10 @@
# * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior # * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names. # Feel free to rename the models, but don't rename db_table values or field names.
from typing import Collection, Optional
from django.db import models from django.db import models
from .validaciones import rut_valido
import logging
class Aplicacion(models.Model): class Aplicacion(models.Model):
@ -218,6 +221,14 @@ class Persona(models.Model):
managed = False managed = False
db_table = 'persona' db_table = 'persona'
def save(self, *args, **kwargs):
# validacion se realiza solo si se esta creando el registro
if self._state.adding:
rut_completo = f'{self.rut}-{self.dv}'
if not rut_valido(rut_completo):
raise Exception(f'RUT {rut_completo}, no es valido!')
super().save(*args, **kwargs)
class Region(models.Model): class Region(models.Model):
id_region = models.IntegerField(primary_key=True) id_region = models.IntegerField(primary_key=True)
@ -316,6 +327,19 @@ class Usuario(models.Model):
managed = False managed = False
db_table = 'usuario' db_table = 'usuario'
def save(self, *args, **kwargs):
# validacion se realiza solo si se esta creando el registro
if self._state.adding:
condition = models.Q(login=self.login) | models.Q(rut=self.rut)
usuario = Usuario.objects.filter(condition).first()
if usuario:
if usuario.login == self.login:
raise Exception(f"Usuario [{self.login}] ya existe!")
else:
raise Exception(f"Usuario con RUT [{self.rut}] ya existe!")
super().save(*args, **kwargs)
class UsuarioRol(models.Model): class UsuarioRol(models.Model):
login = models.ForeignKey(Usuario, models.DO_NOTHING, db_column='login', blank=True, null=True) login = models.ForeignKey(Usuario, models.DO_NOTHING, db_column='login', blank=True, null=True)

View File

@ -33,17 +33,18 @@ def jwt_login(request):
usuario = { 'login': '0', 'clave': '0' } usuario = { 'login': '0', 'clave': '0' }
if not usuario: if not usuario:
return HttpResponse('Acceso no valido', status = 400) return HttpResponse('Acceso no valido', status=400)
if usuario['clave'] != password: if usuario['clave'] != password:
return HttpResponse('Acceso no valido', status = 400) return HttpResponse('Acceso no valido', status=400)
ahora = datetime.utcnow() ahora = datetime.utcnow()
# manana = ahora + timedelta(days=1) manana = ahora + timedelta(days=1)
# manana = manana.replace(hour=0, minute=0, second=0, microsecond=0) manana = manana.replace(hour=0, minute=0, second=0, microsecond=0)
payload = { payload = {
'exp': ahora + timedelta(minutes=60), 'iat': ahora,
'exp': manana, # ahora + timedelta(minutes=60),
'login': usuario['login'] 'login': usuario['login']
} }
token = jwt.encode(payload, private_key, algorithm="HS256") token = jwt.encode(payload, private_key, algorithm="HS256")

View File

@ -1,11 +1,20 @@
from rest_framework import viewsets, mixins from rest_framework import viewsets
from rest_framework.response import Response
from .. import models, serializers from .. import models, serializers
from django.http import HttpResponse from django.http import HttpResponse
import logging
class PersonaViewSet(viewsets.ModelViewSet): class PersonaViewSet(viewsets.ModelViewSet):
queryset = models.Persona.objects.all() queryset = models.Persona.objects.all()
serializer_class = serializers.PersonaSerializer serializer_class = serializers.PersonaSerializer
def destroy(self, request, pk=None): def destroy(self, request, pk=None):
return HttpResponse('No permitido eliminar', status=405) return HttpResponse('No permitido eliminar', status=405)
def create(self, request):
try:
super().create(request)
except Exception as e:
# logging.warning(e.detail['rut'][0])
if e.detail['rut']:
return HttpResponse(e.detail['rut'][0], status=400)
return HttpResponse(e, status=400)

View File

@ -1,15 +1,11 @@
from django.db import transaction from django.db import transaction
from django.http import HttpResponse from django.http import HttpResponse
from django.http import JsonResponse
from django.core.serializers import serialize
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.decorators import action, api_view, schema
from .. import models, schemas, serializers from .. import models, schemas, serializers
from ..validaciones import rut_valido
import json import json
class UsuarioViewSet(viewsets.ModelViewSet): class UsuarioViewSet(viewsets.ModelViewSet):
@ -18,27 +14,15 @@ class UsuarioViewSet(viewsets.ModelViewSet):
schema = schemas.UsuarioSchema() schema = schemas.UsuarioSchema()
def retrieve(self, request, pk=None): def retrieve(self, request, pk=None):
print({ 'pk': pk })
data = super().retrieve(request, pk) data = super().retrieve(request, pk)
print({ 'data': data })
return data return data
def create(self, request): def create(self, request):
try: try:
with transaction.atomic(): with transaction.atomic():
input = json.loads(request.body) input = json.loads(request.body)
rut_completo = f"{input['rut']}-{input.get('dv','?')}"
if not rut_valido(rut_completo): # validaciones se realiza a nivel del model
raise ValueError(f"RUT [{input['rut']}] no valido!")
usuario = models.Usuario.objects.filter(login = input['login']).first()
if usuario:
raise ValueError(f"Usuario [{input['login']}] ya existe!")
usuario = models.Usuario.objects.filter(rut = input['rut']).first()
if usuario:
raise ValueError(f"Usuario con RUT [{input['rut']}] ya existe!")
persona = models.Persona.objects.filter(rut = input['rut']).first() persona = models.Persona.objects.filter(rut = input['rut']).first()
id_tipo_tratamiento = input.get('id_tipo_tratamiento',None) id_tipo_tratamiento = input.get('id_tipo_tratamiento',None)