【问题标题】:how to hide password with ********* on swagger ui with flask_restplus in python如何在 swagger ui 上使用 ********* 在 python 中使用 flask_restplus 隐藏密码
【发布时间】:2019-08-05 14:27:36
【问题描述】:

您好,下面是我的运行代码,可以通过以下网址访问: 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)

您能否告诉我在进入 swagger UI 时应该如何隐藏带 ***** 的密码,并且值应该正确传递给参数。

【问题讨论】:

  • 我认为你需要对设计提出质疑,因为你需要在开发工具 swagger-ui 中输入密码。正确地,您在用户界面中输入密码(您为特定目的而构建的)。 Swagger-ui 是一个开发/测试工具。

标签: python swagger swagger-ui flask-restful flask-restplus


【解决方案1】:

根据flask-restful documentation about Models,一开始可以看到fields.Raw类可以取format parameter

它可以:

修改现有对象键值的呈现方式

因此,您可以将此 format 参数与值 'password' 一起使用,如“字符串”部分下的 Swagger documentation about data types 中所述:

可选的格式修饰符用作字符串内容和格式的提示。 OpenAPI 定义了以下内置字符串格式:

[...]

密码 – 提示 UI 屏蔽输入

所以你可以在你的字段定义中使用这个format='password'

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

但问题是您使用的是 expect 装饰器,带有标准的 Model 定义,它不允许您轻松自定义请求解析器。我建议使用Marshmallow 以便能够更好地控制您的对象序列化。

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2013-09-18
    • 2021-11-15
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    相关资源
    最近更新 更多