Как выполнить скрипт Python или вызвать функцию из скрипта Python, используя flask & wtform - PullRequest
0 голосов
/ 29 ноября 2018

Я очень плохо знаком с Flask & Python, поэтому хочу понять / очистить мои концепции.У меня есть веб-страница, которую я создал, используя колбу и формы.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>

1 Ответ

0 голосов
/ 30 ноября 2018

Вопрос носит очень общий характер, поэтому я постараюсь дать вам подсказку, и, возможно, вы позже вернетесь к нему с большей ясностью.

Flask запрашивает сервер и отображает веб-страницы.Т.е. он выполняет некоторый код на сервере и передает его клиентскому веб-браузеру.Клиентский веб-браузер может затем выполнить код на стороне клиента (т. Е. Javascript) во время просмотра пользователем и может передавать данные обратно на сервер с помощью форм отправки (на разные маршруты Flask) или с помощью запросов AJAX JavaScript (снова на другие маршруты Flask).Поэтому, если вы хотите выполнить скрипт Python на основе некоторого ввода, вам потребуется отдельный маршрут.

Вот простой пример страницы индекса и второго маршрута, который будет выполнять что-то еще:

@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)

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

<html>
<body>
    <form action="{{ url_for('app.calc') }}" method="POST">
    <input name="information" type='text'>
    <button name="submit">
    </form>
</body>
</html>
...