2016-06-10 97 views
1

這是更多關於在哪裏可以找到我要做的這個問題,而不是問如何做到這一點。我敢肯定,這是很好的覆蓋,我只是努力闡明我可以用於Google的正確術語,並找出答案。Python燒瓶 ​​- 從後端的前端獲得的處理輸入

無論如何 - 我有一個Python Flask web應用程序。在網頁上,有一個要求用戶輸入的輸入框。我想要發生的是,在後臺輸入用戶信息時會發生一些魔法。在我自己的場景中,我想要一個URL,然後使用bs4來選擇我需要的並在網頁上顯示它。

爲了簡單起見,我會要求一些簡單的東西,然後我可以從這裏開始構建它:如果我要求用戶指定一個數字,然後按'提交',我怎麼可以將數字乘以10 ?

如果我對錶單代碼是index.html

<form class="form-horizontal" role="form" method="post" action="/"> 
    {{ form.csrf_token }} 
     <fieldset> 
      <div class="form-group"> 
       <label for="GetNum" class="col-lg-2 control-label">Enter Number</label> 
        <div class="col-lg-6"> 
         <input type="text" id="GetNum" name="GetNum" class="form-control" value=""> 
        </div> 
       <input class="btn btn-success" type="submit" value="Calculate"> 
      </div> 
     </fieldset> 
</form> 

我注意到,我可以輸入由<p>form.request.GetNum</p>打印到一個段落。

現在對於這個問題的例子,對於後端功能的代碼將是:

import math 
GetNum = 10 #should be form.request.GetNum value 
CalcResult = GetNum*1000 
print CalcResult # or {{ CalcResult.data }} or something in index.html 

我控制器(app.py)看起來像:

@app.route('/', methods=['GET', 'POST']) 
@login_required 
    def home(): 
    error = None 
    form = PostForm(request.form) # unrelated to question, but will this clash? 
    if .. : 
     do something 
     return redirect(..) 
    else: 
     do something else.. 
     return render_template(..)  

我擔心的是,home功能將結束如果我不得不把數學函數放在那裏,那麼就需要大量的代碼。所以tl; dr,我將如何在我的代碼中實現後端功能? (或請提供給我材料閱讀,謝謝!)

另一件事是我已經在我的'/'頁上有一個窗體,我將不得不重新命名form1 form2,因爲他們會衝突或將它可以嗎?

回答

0

在您的代碼庫的其他地方,無論是在同一個文件中,還是更有可能的模塊或軟件包中,您都可以定義該複雜的任務。讓我們 在相同的目錄中 其他代碼創建一個簡單的模塊complicated.py,即隨後設置複雜的任務:

def do_really_complicated_thing(info): 
    # lots of complicated steps 
    return really_complicated_data 

然後在視圖代碼,我們就可以用這個來代替有它嵌入:

from complicated import do_really_complicated_thing 

@app.route('/', methods=['GET', 'POST']) 
@login_required 
    def home(): 
    error = None 
    form = PostForm(request.form) 
    if form.validate_on_submit() : 
     info = form.info.data 
     complicated_task = do_really_complicated_thing(info) 
     return render_template('something', results=complicated_task) 

因此,簡而言之,您正在尋找的術語是包和模塊,它們可幫助您的代碼更加整潔和可重用。

至於衝突表單 - 您可以將表單定位到一個特定的路由,它只是處理該表單,這是更清晰的,然後必須在單個路由中驗證/解析不同的表單。

+0

非常感謝:) – Stuart23