如何在Python中使用flask_restplus在swagger ui上使用*********隐藏密码

时间:2019-03-14 15:50:37

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

嗨,下面是我的运行代码,可以通过以下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)

您能告诉我在swagger UI上输入密码时如何用*****隐藏密码吗?应该将值正确传递给参数。

1 个答案:

答案 0 :(得分:1)

根据关于模型的flask-restful documentation,您可以从一开始就看到fields.Raw类可以使用format parameter

它可以:

  

修改应如何显示现有对象键的值

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

  

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

     

[...]

     

密码–提示用户界面以掩盖输入

因此您可以像在字段定义中一样使用此format='password'

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

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