Creando una calculadora de interés compuesto con Django

Enviado por christian el

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

  1. Crear un proyecto genérico de Django, sin ninguna configuración extra
  2. Crear una aplicación Django dentro del proyecto, sin configuraciones extra
  3. 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:
    1. Aquí tenéis mas info sobre que es esto! 
    2. 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
    3. """
      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 (%)",
              }
    4. 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:
    5. # 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!!!!!
  4. 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:
    1. """
      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)
      

 

 

Dinahosting: dominios y alojamiento web
My investor

Regístrate en MyInvestory tendrás un extra de 20€ ! :D

Usa el código U048395 y te llevas un regalo en tu primera inversión :)

Usa el código 22c80f y te llevas un regalo en tu primera inversión :)