用于发现服务中URL的烧瓶扩展。自动公开服务的URL

Flask-UrlDiscover的Python项目详细描述


一个flask扩展,用于发现服务中的url并为其他人公开服务的路由。

安装

使用pipeasy_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公开

测试

包中包含一个test suite。要运行练习测试:

python setup.py tests

贡献

如果您有任何问题、发现任何错误/问题或有改进的想法,请在GitHub上创建问题和/或发送电子邮件给我。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在OSGI中使用cxf生成的客户端时出现Java类装入器问题和JaxB异常   java为什么要在javamail中迭代多部分电子邮件中的部分?   并发编程问题   JFileChooser&&System中未调用java windowClosing。退出功能不正常?   SQL查询的java语法分析   java如何使用AspectJ声明字段上的警告   什么是java向量。元素()C#等价物   java解析Android应用程序中tornado web服务中的CSV文件   java我试过c2dm,我需要服务器端   java调整JPanel大小以适应新的JLabel图标   Java与Python脚本的通信   java使用Saxon通过XSLT生成URL   java net::ERR_complete_CHUNKED_编码200(OK)来自struts应用程序中的tomcat   java如何为我的窗格设置不同的位置?   java使用Cypher Neo4j获取给定类型的所有节点(从SQL世界中的tablename中选择*)   nio使用Java解析文件值   java使用WSDL生成REST客户端会是错误的方向吗?   java如何在我的应用程序中构建类映射?   java按钮。setEnabled在第一个循环中不起作用   xPath适用于最后一页,但不适用于第一页