используя другой WS в качестве проверки Flask / Rest / Mysql - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь создать простое веб-приложение с 3 веб-сервисами. Предполагается, что две из моих веб-служб проверят, существует ли студент на курсе или нет. Это делается простым SELECT-запросом. Мой третий веб-сервис должен добавить студента в базу данных, но только в том случае, если этот студент существует в конкретном курсе.

Это мой валидационный WS, который должен возвращать true / false.

@app.route('/checkStudOnCourse/<string:AppCode>/<string:ideal>', methods= ["GET"])
def checkStudOnCourseWS(AppCode, ideal):

myCursor3 = mydb.cursor()
query3 = ("SELECT studentID FROM Ideal.course WHERE applicationCode = " + "'" + AppCode + "' AND Ideal = " + "'" + ideal + "'")
myCursor3.execute(query3)
myresult3 = myCursor3.fetchall()

if len(myresult3) == 0:
    return render_template('Invalid.html')
else:
    return jsonify({'Student in course ': True})

Ниже приведен regResult, который должен выполнять вставку SQL в базу данных. Я хочу, чтобы отправка работала только в том случае, если приведенный выше результат "True", как я могу это сделать? Я знаю, что не выполнил запрос INSERT, но это не проблема. В чем я не уверен, так это: как я могу разрешить вставку только в том случае, если WS проверки «True».

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


if request.method == "POST":

    Period = request.form['period']
    #ProvNr = request.form['provNr']
    Grade = request.form['grade']
    Applicationcode = request.form['applicationcode']
    #Datum = request.form['datum']
    Ideal = request.form['ideal']

CheckStudOnCourse = 'http://127.0.0.1:5000/checkAppCodeWS/'+Applicationcode+'/'+Ideal
CheckStudOnResp = requests.get(CheckStudOnCourse)

1 Ответ

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

Сначала такой синтаксис:

if len(myresult3) == 0, может быть упрощено на if myresult3, потому что Python неявно оценивает это как bool.

Во-вторых, если вы однажды вернулись из функции, нет необходимости писать оператор else:

    if len(myresult3) == 0:
        return render_template('Invalid.html')  #  < -- in case 'True',
                                                #  it returns here, otherwise 
                                                #  function keeps going"""

     return jsonify({'Student in course ': True})  # < -- in case 'False', it is returned here

Сосредоточившись на вашей проблеме, вы можете сделать это:

Получите ваше значение от WS

CheckStudOnCourse = 'http://127.0.0.1:5000/checkAppCodeWS/'+Applicationcode+'/'+Ideal
CheckStudOnResp = requests.get(CheckStudOnCourse)

Извлеките из него json:

if result_as_json.status == 200:
    result_as_json = CheckStudOnResp.json()  #  < -- it is now a dict

Сделайте несколько проверок:

if result_as_json.get('Student in course', False):  #  I highly suggest to use other 
                                                   #  convention to name json keys 
                                                   #  e.g. Student in course -> 
                                                   #  student_exists_in_course
    #  do your code here
...