用于发现服务中URL的烧瓶扩展。自动公开服务的URL
Flask-UrlDiscover的Python项目详细描述
一个flask扩展,用于发现服务中的url并为其他人公开服务的路由。
安装
使用pip或easy_install安装扩展。
$ pip install -U Flask-UrlDiscovery
用法
此包公开了一个烧瓶扩展,允许用户自动收集烧瓶应用程序或蓝图创建的所有(默认)路由。用户可以提供一个自定义uri字符串,用于在系统上公开路由,并限制对某些路由或蓝图的访问。
与烧瓶应用程序和蓝图一起使用
为了公开系统上的所有路由,用户只需使用url_discovery:
fromflaskimportFlask,Blueprintfromflask_url_discoveryimporturl_discoveryapp=Flask(__name__)url_discovery(app)app_bp=Blueprint('my_bp',__name__)@app.route('/')@app.route('/health_check/')defhello_world():return'Hello World!'@app_bp.route('/hello/')defhello_bp():return'Hello Flask Blueprint'if__name__=='__main__':app.register_blueprint(app_bp)app.run('0.0.0.0',5000)
默认情况下,所有路由都在http://host:port/config/routes/
以下是/config/routes/GET请求的示例响应:
{"flask_url_discovery.expose_routes":{"active_urls":["/config/routes/"],"methods":["GET","HEAD","OPTIONS"]},"hello_world":{"active_urls":["/","/health_check/"],"methods":["GET","HEAD","OPTIONS"]},"my_bp.hello_bp":{"active_urls":["/hello/"],"methods":["GET","HEAD","OPTIONS"]},"static":{"active_urls":["/static/<path:filename>"],"methods":["GET","HEAD","OPTIONS"]}}
自定义路由url
用户可以为url发现指定自定义路由url
fromflaskimportFlaskfromflask_url_discoveryimporturl_discoveryapp=Flask(__name__)url_discovery(app,custom_routes_url='/your_custom_routes_url/')@app.route('/')defhelloWorld():return"Hello World!"
Flask URLdiscovery与烧瓶蓝图的url_prefix完美结合:
fromflaskimportFlask,Blueprintfromflask_url_discoveryimporturl_discoveryapp=Flask(__name__)url_discovery(app)app_bp=Blueprint('my_bp',__name__)@app.route('/')defhello_world():return'Hello World!'@app_bp.route('/hello/')defhello_bp():return'Hello Flask Blueprint'if__name__=="__main__":app.register_blueprint(app_bpmurl_prefix='/custom_prefix')app.run('0.0.0.0',5000)
响应:
<...>"my_bp.hello_bp":{"active_urls":["/custom_prefix/hello/"],"methods":["GET","OPTIONS","HEAD"]},<...>
私人路线和蓝图
用户可以私有化烧瓶应用程序/蓝图的单个路径以及整个蓝图。Flask URLdiscovery提供了一个decorator函数。
与``route()````一起使用:
fromflaskimportFlask,Blueprintfromflask_url_discoveryimporturl_discovery,privateapp=Flask(__name__)url_discovery(app)app_bp=Blueprint("my_bp",__name__)@app.route("/")defhello_world():return"Hello World!"@private()@app.route("/restricted_route/")defprivate_endpoint():return"Hello Private Endpoint"@app_bp.route("/hello/")defhello_bp():return"Hello Flask Blueprint"if__name__=="__main__":app.register_blueprint(app_bp)app.run('0.0.0.0',5000)
private_endpoint()将不会显示在/config/routes/请求的响应中。同样的方法对于私有化蓝图的路径也是有效的。
用于烧瓶蓝图:
fromflaskimportFlask,Blueprintfromflask_url_discoveryimporturl_discovery,privateapp=Flask(__name__)url_discovery(app)# or: app_bp = private(Blueprint("my_bp", __name__))app_bp=Blueprint("my_bp",__name__)private(app_bp)@app.route("/")defhello_world():return"Hello World!"@app_bp.route("/private/hello/")defhello_bp():return"Hello Flask Blueprint"@app_bp.route("/private/goodbye/")defbye_bp():return"Goodbye Moonmen"if__name__=="__main__":app.register_blueprint(app_bp)app.run('0.0.0.0',5000)
app_bpblueprint现在已完全private并且属于此blueprint的任何路由都不会通过url发现通过api公开
贡献
如果您有任何问题、发现任何错误/问题或有改进的想法,请在GitHub上创建问题和/或发送电子邮件给我。