我如何使用Flask在Python脚本中获取数据

时间:2018-02-01 10:25:05

标签: python html flask

我写了一个html代码,它将从用户那里获得3个输入。 我附上了html代码片段如下; 您可以尝试运行此代码。这段代码基本上接受来自用户的3个值,即team1,team2和match_id,点击预测按钮后,我希望这些值进入我编写机器学习算法的python脚本。

<!DOCTYPE html>
<html>

<head>
    <title>Criclytics</title>
        <link rel="stylesheet" href="bootstrap.min.css">
        <script src="bootstrap.min.js"></script>
        <script src="jquery.min.js"></script>
    <style type="text/css">
        @import url(http://fonts.googleapis.com/css?family=Exo:100,200,400);
        @import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:700,400,300);

        body{
            margin: 0;
            padding: 0;
            background: #fff;

            color: black;
            font-family: Arial;
            font-size: 25px;


            background-position: center;
            background-repeat: no-repeat;
            background-size: cover;

        }

        .bcg-img{
            width: 100vw;
            height: 100vh;
            z-index: -1;
            position: fixed;
                background-image: url("bg-blurred.jpg");
            background-position: center;
            background-repeat: no-repeat;
            background-size: cover;
        }

        table, td, th {    
               text-align: center;
        }

        table {
            border-collapse: collapse;
            width: 50%;
        }

        th, td {
            padding: 15px;
        }
        .button1 {width: 250px;}
    </style>
</head>
<body>
    <div class="bcg-img"></div>
    <div class="jumbotron" align="center" style="opacity:0.60">
        <h1 align="center"><b>Criclytics</b></h1>
        Predicting chances of winning
    </div>
    <form onsubmit="http://localhost:5000/"> 
         <div class="col-xs-3">
             <label for="ex2">Team 1</label>
             <input class="form-control" id="team1" id="team1" type="text" placeholder="Enter team 1">
        </div>
             <div class="col-xs-3">
             <label for="ex2">Team 2</label>
             <input class="form-control" id="team2" id="team2" type="text" placeholder="Enter team 2">
        </div>
        <div class="col-xs-3">
             <label for="ex2">Match ID:</label>
             <input class="form-control" id="matchid" id="matchid" type="number" placeholder="Enter match ID ">
        </div>
        <br>
        <input type="submit" value="Predict" class="btn btn-info btn-lg" style="width: 250px"/>
        <!--
        <div width="cover" padding="30%"><!--put your graph here</div>-->
    </form>
</body>
</html> 

我正在使用flask在localhost:5000上创建服务器,我编写了代码,如下所示;

from flask import Flask, render_template
from flask import request
app = Flask(__name__)
print("hello")
@app.route('/')
def getrender():
    return render_template('/cric.html')

@app.route('/',methods=['GET','POST'])
def getinfo():
    if  request.method == 'GET':
        a=request.args.get('team1')
        b=request.args.get('team2')
        c=request.args.get('matchid')
        print(a,b,c)
    return a,b,c

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

html文件在localhost:5000上运行完美,但我不知道如何访问这些用户输入值并将其用作我的机器学习算法的输入。 我只是想要帮助如何访问那些team1,team2和match_id并将它们放入变量中,以便我可以在我的程序中使用它们。

2 个答案:

答案 0 :(得分:0)

我的建议:

为html页面分配另一条路线

@app.route('/cric')
def getrender():
    return render_template('/cric.html')

在函数getinfo中从GET更新方法检查POST,并使用request.form获取参数

@app.route('/',methods=['GET','POST'])
def getinfo():
    print request.method  # print the request.method for debug purpose
    if  request.method == 'POST':
        a=request.form.get('team1')
        b=request.form.get('team2')
        c=request.form.get('matchid')
        print(a,b,c)

    return render_template('/cric.html')

更新表单标题并在html中分配三个带名称的输入:

<form action="http://localhost:5000/" method="post">
...
<input class="form-control" id="team1" name="team1" type="text" placeholder="Enter team 1">
...

然后你可以访问'/ cric'来查看html页面,然后提交表单,它会调用'/'的发布请求并打印参数。

答案 1 :(得分:0)

您的表单有问题, 您的所有输入都没有name属性,而是具有2个id属性。 因此,将一个id属性更改为name

here is the reason

  

定义和用法   name属性指定元素的名称。   name属性用于引用JavaScript中的元素,或   在提交表格后引用表格数据。

     

注意:只有具有name属性的表单元素才会在提交表单时传递其值。

您的表格应该是这样的:

<form method="POST" action="{{url_for('getinfo')}}">
         <div class="col-xs-3">
             <label for="ex2">Team 1</label>
             <input class="form-control" name="team1" id="team1" type="text" placeholder="Enter team 1">
        </div>
             <div class="col-xs-3">
             <label for="ex2">Team 2</label>
             <input class="form-control" name="team2" id="team2" type="text" placeholder="Enter team 2">
        </div>
        <div class="col-xs-3">
             <label for="ex2">Match ID:</label>
             <input class="form-control" id="matchid" name="matchid" type="number" placeholder="Enter match ID ">
        </div>
        <br>
        <input type="submit" value="Predict" class="btn btn-info btn-lg" style="width: 250px"/>
        <!--
        <div width="cover" padding="30%"><!--put your graph here</div>-->
    </form>

在您的观看功能中,您应该有2个不同的网址:一个用于主页,另一个用于表单提交

@app.route('/')
def getrender():
    return render_template('/cric.html')

@app.route('/predict', methods=['GET', 'POST'])
def getinfo():
    if request.method=='POST':
        a=request.form.get('team1')
        b=request.form.get('team2')
        c=request.form.get('matchid')
        print(a,b,c)
    else :
        return 'get Im in '
    return 'OK'