簡體   English   中英

Python Flask - 在后端處理從前端獲得的輸入

[英]Python Flask - Processing input obtained from front-end in the back-end

這更多是關於在哪里可以找到我將如何做到這一點的問題,而不是詢問如何做到這一點。 我確信這已經涵蓋得很好,我只是在努力闡明我可以用來谷歌並找出答案的正確術語。

無論如何 - 我有一個 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 因為它們會發生沖突還是可以?

在你的代碼庫的其他地方,或者在同一個文件中,或者更有可能是一個模塊或包,你可以定義那個復雜的任務。 讓我們在與其他代碼相同的目錄中創建一個簡單的模塊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)
 

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

至於沖突表單——您可以將表單定位到只處理該表單的特定路由,這比在單個路由中驗證/解析不同表單要干凈得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM