如何使用flask和wtform执行python脚本或从pythons脚本调用函数

时间:2018-11-29 04:32:03

标签: python html python-2.7 flask-wtforms wtforms

Flask&Python非常陌生,因此想了解/清除我的概念。我有一个使用flask&wtforms创建的网页。 HTML页面非常简单,只有一个字段和一个提交按钮。单击提交按钮时,我想调用python脚本(test.py)本身或python函数(pythonfunction())。还有从网页上有什么方法,无论我输入什么,我都可以作为属性传递给该python脚本(test.py)?感谢帮助

**app.py**
            from flask import Flask , render_template,flash,redirect,url_for,session,logging,request
            from wtforms import Form,StringField,TextAreaField,PasswordField,validators,SelectField,TextAreaField
            from wtforms.widgets import TextArea
            import subprocess

            import test

            app=Flask(__name__)


            @app.route ('/')
            def index():
                return render_template('home.html')

            class testpython(Form):
                testenter=StringField('Enter something')

            @app.route ('/testpage',methods=['GET','POST'])
            def testpage():
                form=testpython(request.form)
                return render_template('testpage.html',form=form,python=testfunc(testenter))

            if __name__ == '__main__':
                app.run(debug=True)

**test.py**
            def pythonfunctiontest (self):
                print data #<something i can print here from that text field in webpage>
                return "all good"


**testpage.html**

        {% extends 'sec_layout.html'%}
        {% block body %}
        {% from "includes/_formhelpers.html" import render_field %}
        <form method="POST" action ="">
          <div class="form-group">
            {{render_field(form.testenter,cols="1", rows="5",class_="form-control")}}
          </div>
          <div class="input-bar-item input-bar-item-btn">
            <button class="btn btn-info">Submit</button>
          </div>
        </form>
        {% endif %}
        {% endblock%}

sec_layout.html

<!DOCTYPE <!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>MY PAGE-TEST</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
  </head>

  <body>
    {% include 'includes/_navbar.html' %}
    <div class= "container">
      {% block body %}{% endblock%}
    </div>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" </script>

  </body>

</html>

2 个答案:

答案 0 :(得分:0)

这个问题很笼统,所以我会尽力引导您,也许您以后可以更清楚地重温这个问题。

Flask询问服务器并呈现网页。即它在服务器上执行一些代码,并将其传递到客户端Web浏览器。然后,客户端网络浏览器可以在用户浏览时执行客户端代码(即Javascript),并可以使用提交表单(到不同的Flask路由)或通过JavaScript AJAX请求(同样是其他Flask路由)将数据传递回服务器。因此,如果要基于某些输入执行python脚本,则需要一条单独的路由。

这是索引页的简单示例,第二条路线将执行其他操作:

as_p()

=========(index.html)

@app.route('/index')
def index():
    """ very basic template render """
    return render_template('index.html')

@app.route('/data-submit', methods=["POST"])
def calc():
    data = request.form.information.data
    # do something with data..
    x = data + data
    return render_template('new_page.html', x)

答案 1 :(得分:0)

包装temp.py在函数中执行的操作。 将其放置在flask.py所在的目录中。在flask.py中调用import temp,然后使用temp.myfunction()。