get带有参数flask/restapi的请求

w8f9ii69  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(327)

我正在尝试执行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()
xcitsw88

xcitsw881#

实际上,有几个地方您的代码可能会失败,因为在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/flask代码应该如下所示:

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()
yxyvkwin

yxyvkwin2#

您需要更新路由url以接收参数

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

然后你可以用这个代码来过滤结果。

相关问题