Python Flask - 在后端处理从前端获取的输入
Python Flask - Processing input obtained from front-end in the back-end
这更多的是关于在哪里可以找到我将如何做到这一点的问题,而不是询问如何做到这一点。我确信这已经很好地涵盖了,我只是在努力阐明我可以用来 Google 并找出答案的正确术语。
无论如何 - 我有一个 Python Flask 网络应用程序。在网页上,有一个输入框请求用户输入。我希望发生的事情是在后台用户输入时发生一些神奇的事情。在我自己的场景中,我想取一个URL,然后用bs4挑出我需要的显示在网页上。
为简单起见,我会要求一些简单的东西,然后我可以从那里开始构建:如果我要请求用户指定一个数字然后按 'Submit',我如何乘以数字乘以 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; 博士,我将如何在我的代码中实现后端功能? (或者请提供我material阅读,谢谢!)
另一件事是我的“/”页面上已经有一个表单,我是否必须像 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)
所以,简而言之——您要查找的术语是包和模块,它们
帮助您的代码更整洁和可重用。
至于冲突表单——您可以将表单定位到 post 到只处理该表单的特定路由,这样比必须在单个 validate/parse 中处理不同的表单要干净得多路线.
这更多的是关于在哪里可以找到我将如何做到这一点的问题,而不是询问如何做到这一点。我确信这已经很好地涵盖了,我只是在努力阐明我可以用来 Google 并找出答案的正确术语。
无论如何 - 我有一个 Python Flask 网络应用程序。在网页上,有一个输入框请求用户输入。我希望发生的事情是在后台用户输入时发生一些神奇的事情。在我自己的场景中,我想取一个URL,然后用bs4挑出我需要的显示在网页上。
为简单起见,我会要求一些简单的东西,然后我可以从那里开始构建:如果我要请求用户指定一个数字然后按 'Submit',我如何乘以数字乘以 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; 博士,我将如何在我的代码中实现后端功能? (或者请提供我material阅读,谢谢!)
另一件事是我的“/”页面上已经有一个表单,我是否必须像 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)
所以,简而言之——您要查找的术语是包和模块,它们 帮助您的代码更整洁和可重用。
至于冲突表单——您可以将表单定位到 post 到只处理该表单的特定路由,这样比必须在单个 validate/parse 中处理不同的表单要干净得多路线.