【问题标题】:Python Flask - Processing input obtained from front-end in the back-endPython Flask - 在后端处理从前端获得的输入
【发布时间】:2016-10-11 18:23:31
【问题描述】:

这更多的是关于在哪里可以找到我将如何做到这一点的问题,而不是询问如何做到这一点。我确信这已经很好地涵盖了,我只是在努力阐明我可以在 Google 中使用的正确术语并找出答案。

无论如何 - 我有一个 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>

我注意到我可以通过&lt;p&gt;form.request.GetNum&lt;/p&gt; 将输入打印到段落中。

现在对于这个问题的示例,后端功能的代码将是:

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; 博士,我将如何在我的代码中实现后端功能? (或者请给我提供阅读材料,谢谢!)

另一件事是我的“/”页面上已经有一个表单,我是否必须将表单重命名为 form1 form2,因为它们会发生冲突还是可以?

【问题讨论】:

    标签: python flask backend


    【解决方案1】:

    代码库中的其他地方,或者在同一个文件中,或者更有可能 一个模块或包,你可以定义那个复杂的任务。让我们 在与您的目录相同的目录中创建一个简单的模块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)
     
    

    所以,简而言之 - 您正在寻找的术语是包和模块,它们 帮助您的代码更整洁和可重用。

    至于表单冲突——您可以将表单定位为发布到只处理该表单的特定路由,这比在单个路由中验证/解析不同的表单要干净得多。

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2023-03-15
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多