Как обработать POST-запросы в python и вернуть правильный JSON? - PullRequest
0 голосов
/ 28 сентября 2019

У нас есть REST-контроллер на python.Контроллер возвращает POST-запрос в def foo () и возвращает ответ, перешел в def ml (df) и получил от него ответ.Мы хотим получить ответ как правильный JSON.

import json

from flask import Flask, abort, request, jsonify

app = Flask(__name__)

import pickle
import numpy as np
import pandas as pd
import ast
@app.route('/test', methods=['GET'])
def ml(df):
    if len(df) == 0:
        abort(404)
    df = pd.DataFrame([df])
    profs = ["Умение расставлять приоритеты", "Умение работать в команде", "Организационная осведомленность",
             "Эффективное решение проблем", "Самосознание", "Проактивность", "Способность оказывать влияние",
             "Эффективное принятие решений", "Способность к обучению", "Техническая смекалка",
             "опыт заключения торговых сделок",
             "навыки делового общения, ведения переговоров", "опыт работы на выставках, презентация продукции",
             "ведение и расширение клиентской базы", "составление и заключение договоров"]
    gends = ['FEMALE', 'MALE']
    educations = ['HIGH', 'SECONDARY', 'VOCATIONAL']
    for prof in profs:
        df[prof] = df['skills'].map(lambda s: prof in s)
    oldprofs = ['ИСПЫТАТЕЛЬ', 'НОТАРИУС', 'АНАЛИТИК', 'ЭКСКУРСОВОД', 'ТУРАГЕНТ', 'ПЕРЕВОДЧИК', 'СМЕТЧИК', 'ШТУРМАН',
                'ЮРИСКОНСУЛЬТ', 'ЛЕКТОР', 'ЖУРНАЛИСТ', 'СТАТИСТИК', 'БУХГАЛТЕР', 'ДИАГНОСТ', 'КОРРЕКТОР', 'КОПИРАЙТЕР']
    for oldprof in oldprofs:
        df[oldprof] = df['fromProfession'].map(lambda s: oldprof in s)
    for gend in gends:
        df[gend] = df['gender'].map(lambda s: gend in s)
    for educat in educations:
        df[educat] = df['education'].map(lambda s: educat in s)
    df = df.drop(['fromProfession'], axis=1)
    df = df.drop(['education'], axis=1)
    df = df.drop(['gender'], axis=1)
    X = df.drop('skills', axis=1).values
    with open('model.pkl', 'rb') as f:
        model1 = pickle.load(f)
    model1.predict(X[0:1])
    pred_prob = model1.predict_proba(X[0:1])
    pred_prob=pred_prob*100
    profs1 = np.array(profs)
    pred_prob1 = pd.DataFrame(pred_prob, columns=model1.classes_)
    pred_prob2 = pred_prob1.T.to_dict()
    print (json.dumps(pred_prob2, ensure_ascii=False))
    js=json.dumps(pred_prob2, ensure_ascii=False)

    return jsonify(js)


@app.route('/foo', methods=['POST'])
def foo():
    if not request.json:
        abort(400)
    index = ml(request.json)
    return json.dumps(index, ensure_ascii=False)
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

Входящий JSON:

{"age":52,"gender":"FEMALE","skills":["Техническая смекалка","контроль отгрузки и доставки товара","Способность к обучению","уверенное владение ПК, знание 1С, Word, Excel","Опыт работы с фреймворками для программистов (CMF)"],"education":"SECONDARY","fromProfession":"ЮРИСКОНСУЛЬТ"}

Исходящий:

{"0": {"FRONTEND DEVELOPER": 3.4395349083386844, "IT-ИНЖЕНЕР": 45.03697024406095, "JAVA DEVELOPER": 7.413367703303954,
"PYTHON РАЗРАБОТЧИК": 4.490726584879357, "QA-ИНЖЕНЕР": 12.002460181144048, "БИЗНЕС-АНАЛИТИК": 16.914337023526357,
"ИНЖЕНЕР-ТЕСТИРОВЩИК": 4.699860305283799, "НАГРУЗОЧНЫЙ ТЕСТИРОВЩИК": 1.8262132725488815, "СИСТЕМНЫЙ АНАЛИТИК":
4.176529815675104}}

Пожалуйста, помогите нам заставить этот пример работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...