2016-06-10 40 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