как скрыть пароль с ********* на пользовательском интерфейсе swagger с flask_restplus в python - PullRequest
1 голос
/ 14 марта 2019

Привет. Ниже приведен мой рабочий код, доступ к которому можно получить по следующему URL: http://127.0.0.1:5000/api/documentation

from flask import Flask, Blueprint
from flask_restplus import Api, Resource, fields

app = Flask(__name__)
blueprint = Blueprint('api', __name__, url_prefix='/api')
api = Api(blueprint, doc='/documentation') #,doc=False

app.register_blueprint(blueprint)

app.config['SWAGGER_UI_JSONEDITOR'] = True

login_details = api.model('LoginModel',{'user_name' : fields.String('The Username.'),'pass_word' : fields.String('The password.'),})
# pass_word = api.model('Pwd', {'pass_word' : fields.String('The password.')})
credentials = []
python = {'user_name' : '1234','pwd':'23213413'}
credentials.append(python)

@api.route('/login')
class Language(Resource):

    @api.marshal_with(login_details, envelope='the_data',mask='pass_word')
    def get(self):
        return credentials

    @api.expect(login_details)
    @api.marshal_with(login_details, envelope='the_data',mask='pass_word')
    def post(self):
        login_details = api.payload
        print(login_details)
        login_details['id'] = len(credentials) + 1

        credentials.append(login_details)
        return {'result' : 'credentials added'}, 201

if __name__ == '__main__':
    app.run(debug=True)

Скажите, пожалуйста, что мне делать, чтобы скрыть пароль с *****, когда явход в пользовательский интерфейс, и значение должно быть передано в аргумент правильно.

1 Ответ

1 голос
/ 19 марта 2019

Согласно документации по фляге о моделях, в начале вы можете видеть, что класс fields.Raw может принимать параметр format :

Может:

изменить способ представления значения существующих ключей объекта

Таким образом, вы можете использовать этот параметр format со значением 'password', как описано в документации Swagger о типах данных в разделе «String»:

Необязательный модификатор формата служит подсказкой для содержимого и формата строки. OpenAPI определяет следующие встроенные строковые форматы:

[...]

пароль - подсказка пользовательским интерфейсам для маскировки ввода

Таким образом, вы МОЖЕТЕ использовать это format='password' как в определении поля:

pass_word = fields.String('The password.', format='password')

Но проблема в том, что вы используете декоратор expect со стандартным определением Model, который не позволяет вам легко настраивать ваш анализатор запросов. Я бы порекомендовал использовать Marshmallow , чтобы иметь возможность лучше контролировать сериализацию вашего объекта.

...