flask принудительное принудительное применение обязательных типизированных параметров - PullRequest
0 голосов
/ 14 апреля 2020

Я использую Flask == 1.1.2 и flask -restplus == 0.13.0 для создания приблизительного и готового API REST.

Я следую официальной документации о том, как указать, требуется ли аргумент, однако я все еще могу получить доступ к URL-адресам без параметров, и не выдается никакой ошибки.

Кроме того, сгенерированный интерфейс Swagger не отражает того, что методы требуют параметров. Как мне применить это?

Вот мой код:

from flask import Flask
from flask_restplus import Api, Resource, reqparse
from werkzeug.exceptions import BadRequest


#e = BadRequest('My custom message')
#e.data = {'custom': 'value'}
#raise e

flask_app = Flask(__name__)
app = Api(app = flask_app)


mylist_namespace = app.namespace('mylist', description='MyList API')



@mylist_namespace.route("/")
class MyListClass(Resource):
    def get(self):
        parser = reqparse.RequestParser()
        parser.add_argument('rate', type=int, required=True,  help='Rate cannot be converted')
        parser.add_argument('name', type=str, help='Enter a name')      
        return {
            "status": "Got my list"
        }

    def post(self):
        return {
            "status": "Posted my list"
    }

1 Ответ

0 голосов
/ 14 апреля 2020

Чтобы запустить проверку, вам нужно заставить reqparser проанализировать данные

data = parser.parse_args()

После анализа вы можете получить доступ к вашим аргументам в data dict

Более того, я бы предлагаем вам переместить инициализацию вашего синтаксического анализатора на уровень класса, чтобы избежать создания дополнительного синтаксического анализатора.

class MyListClass(Resource):
    parser = reqparse.RequestParser()
    parser.add_argument('rate', type=int, required=True,  help='Rate cannot be converted')
    parser.add_argument('name', type=str, help='Enter a name') 
    def get(self):
        ...

Таким образом, ваш анализ будет выполняться с ключевым словом «self»: ​​

data = self.parser.parse_args()
...