Передать параметр в Flask метод API - PullRequest
0 голосов
/ 21 февраля 2020

Я довольно новичок в Flask API, поэтому я надеюсь, что это будет довольно легко решить.

Я работаю над API (сейчас у него есть только одна конечная точка, но как только как мне удастся реализовать его функциональность, еще будет следовать). Я сгенерировал свой API с помощью редактора Swagger и пытаюсь реализовать методы. Мне удалось реализовать метод GET, который не принимает переменных и возвращает файл json.

Сейчас я пытаюсь передать переменную этому методу для некоторых действий.

Моя структура каталогов выглядит следующим образом:

swagger_server/
    |---->__main__.py
    |---->controllers
           '---->default_controller.py

My __main__.py file (я удалил несколько пустых строк, чтобы сократить этот вопрос):

  1 #!/usr/bin/env python3
  3 import connexion
  5 from swagger_server import encoder
  7 
  8 def main():
  9     app = connexion.App(__name__, specification_dir='./swagger/')
 10     app.app.json_encoder = encoder.JSONEncoder
 11     app.add_api('swagger.yaml', arguments={'title': 'Test API'}, pythonic_params=True)
 12     app.run(port=8080)
 14 
 15 if __name__ == '__main__':
 16     main()

My default_controller.py:

  1 import connexion
  2 import six
  3 import os
  4 import json
 60
 61 def get_supported_types(test):  # noqa: E501
 62     """Retrieve supported types for number test
 63     param:    test = id of supported type
 64     :rtype: InlineResponse200
 65     """
 66     print(test)
 70
 71     return 'blabla'

Без параметра я смог получить данные с помощью curl как это curl -H 'Authorization: 0123' -H --trace-ascii /tmp/dump.txt 'http://127.0.0.1:3080/v1/supported_types'

Я попытался добавить дополнительный заголовок с -H "test: 15", чтобы добавить его к URL http://127.0.0.1:3080/v1/supported_types?test=15 (что привело к 500 Ошибка сервера) и http://127.0.0.1:3080/v1/supported_types/?test=15 (что привело к Ошибка 404 не найдена).

Также я прочитал немного о @ app.route, который я пробовал, но это не сработало:

@app.route("/v1/supported_types/", methods=['GET'])
NameError: name 'app' is not defined

Может кто-нибудь помочь мне передать этот аргумент к методу?

1 Ответ

1 голос
/ 21 февраля 2020

Поместите имя переменных в маршрут и метод, который вы будете использовать, тогда вы можете обработать

@my_bp.route('/my_route/<int:id_report>')
def report(id_report=1):
    report = make_pdf(Report.query.get(id_report))
    return send_file(report, attachment_filename="My_Report.pdf", as_attachment=True )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...