2016-06-15 7 views
1

Ich bin neu in Django und daher hätte ich ein paar Fragen zu stellen.Schwere Berechnung in Django

Ich folge dem Tutorial auf dieser Grundlage.

http://hplgit.github.io/web4sciapps/doc/pub/._web4sa_django006.html

Sie haben eine Rechen Klasse haben, und es wird in der views.py genannt die Berechnung auszuführen.

Rechen Klasse

from numpy import exp, cos, linspace 
import matplotlib.pyplot as plt 
import os, time, glob 

def damped_vibrations(t, A, b, w): 
    return A*exp(-b*t)*cos(w*t) 

def compute(A, b, w, T, resolution=500): 
    """Return filename of plot of the damped_vibration function.""" 
    print os.getcwd() 
    t = linspace(0, T, resolution+1) 
    y = damped_vibrations(t, A, b, w) 
    plt.figure() # needed to avoid adding curves in plot 
    plt.plot(t, y) 
    plt.title('A=%g, b=%g, w=%g' % (A, b, w)) 
    if not os.path.isdir('static'): 
     os.mkdir('static') 
    else: 
     # Remove old plot files 
     for filename in glob.glob(os.path.join('static', '*.png')): 
      os.remove(filename) 
    # Use time since Jan 1, 1970 in filename in order make 
    # a unique filename that the browser has not chached 
    plotfile = os.path.join('static', str(time.time()) + '.png') 
    plt.savefig(plotfile) 
    return plotfile 

if __name__ == '__main__': 
    print compute(1, 0.1, 1, 20) 

views.py

from django.shortcuts import render_to_response 
from django.template import RequestContext 
from django.http import HttpResponse 
from models import InputForm 
from compute import compute 
import os 

def index(request): 
    os.chdir(os.path.dirname(__file__)) 
    result = None 
    if request.method == 'POST': 
     form = InputForm(request.POST) 
     if form.is_valid(): 
      form2 = form.save(commit=False) 
      result = compute(form2.A, form2.b, form2.w, form2.T) 
      result = result.replace('static/', '') 
    else: 
     form = InputForm() 

    return render_to_response('vib1.html', 
      {'form': form, 
      'result': result, 
      }, context_instance=RequestContext(request)) 

frank zu sein, die ich nicht zu bin sicher, ob dies der richtige Weg ist, es zu tun. Soweit ich weiß, werden Ansichten auf dem Clientcomputer gerendert. Wenn es jedoch intensive Ressourcen erfordert, sollte es auf der Server-Seite erfolgen. Komme ich hier etwas falsch?

Oder wie soll das Ganze sein?

+3

falsch, Ansichten werden nicht auf dem Clientcomputer verarbeitet. – Sayse

+2

Ich stimme für das Schließen dieser Frage als Off-Topic, weil es auf einer falschen Annahme basiert. –

+1

Ich fühle mich nicht wie Downvote ist die Lösung hier. Wir alle waren Anfänger, und dies ist ein ehrlicher Fehler, der auf verwirrenden Namenskonventionen beruht. –

Antwort

2

Ansichten werden auf dem Clientcomputer gerendert.

Dies ist nur falsch, Ansichten sind auf dem Server verarbeitet und dann die Ansichten Antwort ist das, was an den Client zurückgesendet wird.

In einer normalen HTML-Antwort rendert der Client-Browser dann den HTML-Code.

Die einzige Verarbeitung, die ein Client-Rechner jemals ausführen muss, ist, was auch immer auf der Client-Seite getan wird (eckig, javascript, usw.).

2

Sie machen nichts falsch. Die Funktionen von views.py sind kein Front-End-Code, sie sind Back-End-Code. Sie Geist angebracht ist immer noch auf den Begriff MVC, aber in django es ist wie MVT, wo die views in django ist die controller in MVC und Djangos html template entspricht das Konzept der view in MVC. Der gesamte Python-Code wird auf dem Server ausgeführt, nur HTML und Javascript, die Sie in den Templates haben, werden auf der Client-Seite gerendert.