GET-запрос с параметрами FlasK / Rest API - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь выполнить запрос 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 голосов
/ 07 ноября 2018

На самом деле есть несколько моментов, в которых ваш код (ы) может потерпеть неудачу, потому что установить правильную интерфейсную цепочку в Flask немного сложно (но оно того стоит в конце). У вас есть встречная часть front-end HTML код, где вы начинаете запрос с правильной переменной, такой как "course" в вашем примере, которая может выглядеть следующим образом:

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

Тогда Flask as back-end получит эту переменную ( параметр ) как часть вашей строки запроса как часть строки 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()
0 голосов
/ 07 ноября 2018

Вам необходимо обновить URL маршрута, чтобы получить параметры

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

Затем вы можете использовать этот код_курса для фильтрации результатов.

...