Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/04/2012, 19:28
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Django, Buenas practicas en vistas

Voy hacer algunas cuantas criticas acerca del código.

1.- No uses tabs, usa espacios (de preferencia 4 espacios).
¿Porque? Bueno tiene varios motivos, pero el mas sobresale
es que los tabs no se ven igual en todos los editores haciendo esto
algo incomodo.

2.- No uses ; no es necesario en python.
Si, si puedes usar ; lo puedes hacer pero, es feo.

3.- En la funcion registrar_usuario, nunca haces uso del parámetro request, entonces no necesita ese parámetro.

Código:
def registrar_usuario(request):
	#creando usuario
	usuario = User.objects.create_user();
	return usuario

def registrar_apartamento(request):
	#creando usuario
	usuario = registrar_usuario(request)
	#registrando apartamento
	return HttpResponse('apartamento registrado')

Cita:
Iniciado por minkweb Ver Mensaje
Resulta que estoy haciendo un sistema donde se debe registrar un apartamento y un usuario al mismo tiempo, he decidido dividir esto en 2 metodos registrar_usuario, registrar_apartamento.
Hasta aquí vas bien.

Cita:
Iniciado por minkweb Ver Mensaje
Cuando se registra un apartamento se registra al mismo tiempo el usuario, ósea dentro de la funcion registrar_apartamento se llama a la funcion registrar_usuario, dejo un código algo pobre para hacer un ejemplo
¿Que tal si ya tengo un usuario registrado?

Cita:
Iniciado por minkweb Ver Mensaje
Mas o menos así iría, así seria el funcionamiento..
Nunca programes sobre un mas o menos. Por ejemplo, no saber como o que se va a hacer es un buen ejemplo de un 'mas o menos'. En cambio si el cliente te dice mas o menos que es lo quiere entonces, tienes que llenar esos huecos para poder programar algo.

Cita:
Iniciado por minkweb Ver Mensaje
la funcion registrar_usuario no devuelve un HttpResponse, pero
¿Que pasa si mas adelante necesito que lo haga?, por ejemplo, mas adelante necesito hacer un registro de usuario sin apartamento, tener otra función seria redundar el código
Entonces necesitas hacer una vista. Que llame a la función que registre el usuario.

Cita:
Iniciado por minkweb Ver Mensaje
¿La forma correcta de hacerlo es con un if, si un parámetro es True retorne HttpResponse si es False retorne un Diccionario?
No, de hecho, es probablemente una de las peores formas. Por que el tipo de retorno depende en los parámetros que reciba. Ademas que generas mas dependencias (tightly coupled).

Cita:
Iniciado por minkweb Ver Mensaje
Con esto me refiero a que, en views.py están las funciones que "renderizan" los templates, pero las funciones que tienen mas lógica o procesos mas pesado donde deberían ir?
Depende del tipo lógica es donde lo colocas.

Si es lógica con respecto a los Modelos entonces debería ir en los modelos. (Ejemplo: Si tengo algún Modelo llamado Worker y quiero saber si trabajo hoy o no, puedo hacer un método llamado worked_today, o mejor si quiero saber si trabajo algún día en especifico puedo hacer una función worked que reciba como parámetro una fecha.)

Si es lógica de como se muestra el contenido entonces debería ir en los templates (Por ejemplo colorear las filas impares de un color y las pares de otro).

Lo que haces en las vistas (o views) debería ser un puente entre los templates y los modelos. Tal como lo sugiere el modelo MVC (segun el modelo mvc, la vista seria un template y el controlador una vista).