带有参数FlasK / Rest API的GET请求

时间:2018-11-06 21:30:49

标签: python mysql rest flask flask-restful

我正在尝试执行GET请求,该请求应根据设置的参数从数据库中打印特定行。参数应该是一门课程的名称,我希望它从所选课程中获取所有数据。将其解释为SQL查询可能会更容易一些。查询可能看起来像这样“ SELECT * FROM courselist WHERE course ='D0024E';” 那里的“课程”。

我设法完成了fetchall()并从特定表中接收了所有行,但是我没有设法使参数正常工作,因此我可以从特定课程中获取信息。

from flask import Flask
from flask import render_template
import requests
from flask import request
from flask import jsonify
import mysql.connector

app = Flask(__name__)

mydb = mysql.connector.connect(user='Mille',
                          auth_plugin='mysql_native_password',
                          password='jagheter12',
                          host='localhost',
                          database='paraplyet')

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

@app.route('/courses', methods= ["GET"])
def getStudentInCourse():
    myCursor2 = mydb.cursor()
    query2 = ("SELECT * FROM paraplyet.kursinfo")
    myCursor2.execute(query2)
    myresult2 = myCursor2.fetchall()

    return jsonify(myresult2)

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

2 个答案:

答案 0 :(得分:0)

您需要更新您的路线网址以接收参数

@app.route('/courses/<course_code>', methods= ["GET"])
def getStudentInCourse(course_code):

然后您可以使用此course_code过滤结果。

答案 1 :(得分:0)

实际上,您的代码可能会失败,这是因为在Flask中建立正确的前端后端链有些棘手(但值得一提)。 您有一个前端 HTML 代码,在该代码中,您可以使用适当的变量(例如示例中的“ course”)开始您的请求,如下所示:

<form action="/courses" method="post">
  <input>
  <button type="submit"></button>
</form>

然后将Flask作为后端,会将此变量(参数)作为查询字符串的一部分作为 URL字符串的一部分。您可以采用以下形式检索此参数:

course = request.form.get('course')

要实现此目的,您必须添加视图的方法“ POST” ,因为该视图默认仅处理“ GET” -s。

@app.route('/courses', methods=["GET", "POST"])

然后,您可以在需要完成后端操作时使用此变量:

query2 = ("SELECT * FROM courseInfo where courseCode = '" + course +  "';")

这些结果,然后您可以通过以下方式将其传递回前端:

return jsonify(myresult2)

您的python /烧瓶代码应如下所示:

from flask import Flask
from flask import render_template
import requests
from flask import request
from flask import jsonify
import mysql.connector

app = Flask(__name__)

mydb = mysql.connector.connect(user='Mille',
                          auth_plugin='mysql_native_password',
                          password='jagheter12',
                          host='localhost',
                          database='paraplyet')

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

@app.route('/courses', methods= ["GET", "POST"])
def getStudentInCourse():

    if request.method == "POST" and request.form.get('course') != '':

        myCursor2 = mydb.cursor()

        course = request.form.get('course')
        query2 = ("SELECT * FROM courseInfo where courseCode = '" + course +  "';")

        myresult2 = myCursor2.execute(query2)

        return jsonify(myresult2)

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