Hoy hacemos una combinación del mundo de la Tecnología con la Economía !!! :D
Vamos a comentar los pasos en general para realizar tu propia calculadora de interés compuesto con el framework de desarrollo Django. La he publicado aquí para que podáis ver el resultado y usarla al mismo tiempo claro!
¿Que és Django?
Sabéis que no soy de definiciones oficiales por lo que según mi opinión: Django es un framework de desarrollo basado en Python orientado al desarrollo web con un enfoque muy minimalista y orientado al rendimiento
¿Qué vamos a hacer?
Un proyecto muy muy sencillo. Crear nuestra propia calculadora de interés compuesto que nos guarde todas las consultas que hagamos.
Ser es muy muy sencillo. Los requisitos que vamos a conseguir son:
- Formulario web con capital inicial e interés esperado
- Visualizar el resultado de nuestra consulta en la misma página
- Visualizar otros ejemplos de antiguas consultas
Pasos a seguir
Como ya tengo algunos posts sobre características de Django y ejemplos, algunos de los pasos os diré que reviséis esos posts que no os voy a escribir dos veces lo mismo eh! :P
- Crear un proyecto genérico de Django, sin ninguna configuración extra
- Crear una aplicación Django dentro del proyecto, sin configuraciones extra
- Dentro de esta nueva aplicación, creamos un Model llamado Question (o como queráis llamarlo, yo lo he planteado asi!) con su ModelForm asignado para que nos sea más sencillo su gestión:
- Aquí tenéis mas info sobre que es esto!
- Una mini personalización que vamos a añadir en el ModelForm es la nomenclatura de los campos para que sean algo más amigables. Aquí os dejo un trozo del código para que lo tengáis como base
""" Question form to map Question model element """ class QuestionForm(forms.ModelForm): class Meta: model = Question #fields = "__all__" #exclude = ["exec_date"] fields = ["base_ammount", "extra_anual_share", "anual_interest_expected"] labels = { "base_ammount": "Capital inicial (€)", "extra_anual_share": "Aportación extra anual (€)", "anual_interest_expected": "Interés anual esperado (%)", }
- Otra personalización es la de generar un custom save() para generar el resultado de la consulta. Lo que hacemos es sobre-escribir el proceso de guardado por defecto del Model para generar el resultado en tiempo real. Aquí lo tenéis:
# Funcion save custom para sobre-escribir el guardado por defecto # Obtenemos los campos del formulario y generamos el total del interés compuesto # Véis que esto es muy muy estático. Pero como prueba está perfecta! def save(self, *args, **kwargs): base_ammount = self.base_ammount interest = self.anual_interest_expected/100 extra_share = self.extra_anual_share freq_interest_payment = 1 # Interest Compount steps ## Just one investment # total_with_one = base * (1 + interest/freq_interest_payment) ^ (freq_interest_payment * time) ## Some future invests # total = total_with_one + anual_invest * ( (1 + interest/freq_interest_payment) ^ (freq_interest_payment * time) -1 / # ( (1 + interest/freq_interest_payment) ^ (freq_interest_payment * 12) -1)) years = [1, 5, 10, 15, 20, 40] for year in years: total_with_one = base_ammount * (1 + interest/freq_interest_payment) ** (freq_interest_payment*year) total_extra = 0 # Seguid vosotros y practicáis!!!!!
- La vistas se gestionan desde el fichero views.py (que extraño no?! jaja). Como esto es un proyecto muy sencillo, directamente desde el método index, montaremos nuestro formulario y resultados. Los pasos genéricos son crear el formulario, guardar los datos y mostrar el resultado. Para ello os dejo una porción del código como base también:
""" Main view """ def index(request): # Aquí obtenemos siempre los últimos 4 resultados para mostrarlos siempre last_question = Question.objects.order_by("-exec_date")[:4] if last_question.count() == 0: last_question = [] # Geramos el formulario if request.method == "POST": questionForm = QuestionForm(request.POST, request.FILES) # Si pasamos las validaciones del formulario, generamos la consulta if questionForm.is_valid(): # Generamos el resultado y lo guardamos todo en DDBB questionForm.save() # Funcion "core" de Django para indicar que hay un nuevo contenido. # No es obligatorio pero bueno es recomendable F("Question") + 1 # También siempre es recomedable realizar un return a un destino para # evitar que la aplicación pueda entrar en un bucle return HttpResponseRedirect(reverse("interestCompound:index")) else: questionForm = QuestionForm() # Enviamos los resultados a la plantilla de la vista para pintarlo bonito context = { "last_question": last_question, "question_form": questionForm, } return render(request, "interestCompound/index.html", context)