2016-06-15 38 views
1

我是Django的新手,因此我會提出幾個問題。Django中的重度計算

我正在關注基於此的教程。

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

他們有一個計算類,它是所謂的views.py進行計算。

計算類

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)) 

坦率地說我也不太清楚,如果這是這樣做的正確方法。據我所知,視圖呈現在客戶端計算機上。但是,如果需要大量資源,則應該在服務器端完成。我在這裏弄錯了什麼?

或者整個事情應該如何呢?

+3

錯誤,客戶端計算機上未處理視圖。 – Sayse

+2

我投票結束這個問題作爲題外話,因爲它是基於一個不正確的假設。 –

+1

我不覺得downvote是這裏的解決方案。我們所有人都是初學者,這是基於混淆命名約定的一個誠實的錯誤。 –

回答

2

視圖在客戶端計算機上呈現。

這僅僅是不正確的看法是處理在服務器上,然後將意見響應就是被髮送回客戶端。

在正常的html響應中,客戶端瀏覽器然後呈現html。

客戶端唯一需要處理的事情就是在客戶端做什麼(angular,javascript等)。

2

你沒有做錯什麼。 views.py函數不是前端代碼,它們是後端代碼。你的頭腦仍然附着在概念MVC,但在Django它就像MVT,其中在Django的viewsMVCcontroller和Django的HTML template對應的viewMVC概念。所有的python代碼都在服務器上執行,只有模板中的html和javascript在客戶端呈現。