Flask-restful 中的 Catch-All URL 示例也捕获 /
Catch-All URL example in flask-restful also catching /
有a catch-all URL example for Flask:
from flask import Flask
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
return 'You want path: %s' % path
if __name__ == '__main__':
app.run()
装饰器可以翻译成下面的代码看起来更类似于 Flask-RESTful 实现 相同 功能:
app.add_url_rule('/', 'catch_all', catch_all, defaults={'path': ''})
app.add_url_rule('/<path:path>', 'catch_all', catch_all, defaults={'path': ''})
如果我是对的,这可以进一步转化为等效的 Flask-RESTful 应用程序(至少调试显示它创建了相同的 URL 路线):
class RESTapp(Resource):
def get(self, path):
# do get something
api.add_resource(RESTapp, '/', '/<path:path>', defaults={'path': ''})
问题是此应用程序将所有 URL 重定向到 / 并且我无法在 get() 函数中获取请求的路径。我想在与 Flask 相同的函数中处理所有路径(/ 和'/'),但使用 Flask-RESTful.
类似问题:
- Catch-All URL in flask-restful 提问者 不想捕捉 / 或至少不在与其他 URL-s.[=51= 相同的函数中]
- Flask restful API urls 回答者 提出两个 classess 作为两个资源 。我必须通过
resource_class_kwargs
关键字参数初始化 class 并且 我只想保留一个实例,所以这对我来说不是一件好事 .
我尝试过的:
- 为同一个 class 创建两个
add_resource
调用。它以错误结束。
- 调试
add_resource
。它表明它从端点创建了一个资源视图函数,并将其提供给 add_url_rule
函数。否则它的工作原理与随后的两个 add_url_rule
函数相同。
通过反复试验,我找到了解决方案,该解决方案既没有记录在案,也不像预期的做法(与 Flask 中的类似,在问题中显示)。
必须为 get()
和其他函数提供 Pythonic 默认参数:get(stuff='DEF_VAL')
有效的完整示例:
from flask import Flask
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
class RESTapp(Resource):
@staticmethod
def get(path=''): # <-- You should provide the default here not in api.add_resource()!
return 'You want path: \'%s\'' % path # do get something
api.add_resource(RESTapp, '/', '/<path:path>') # Here just the URLs must be the arguments!
if __name__ == '__main__':
app.run()
有a catch-all URL example for Flask:
from flask import Flask
app = Flask(__name__)
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
return 'You want path: %s' % path
if __name__ == '__main__':
app.run()
装饰器可以翻译成下面的代码看起来更类似于 Flask-RESTful 实现 相同 功能:
app.add_url_rule('/', 'catch_all', catch_all, defaults={'path': ''})
app.add_url_rule('/<path:path>', 'catch_all', catch_all, defaults={'path': ''})
如果我是对的,这可以进一步转化为等效的 Flask-RESTful 应用程序(至少调试显示它创建了相同的 URL 路线):
class RESTapp(Resource):
def get(self, path):
# do get something
api.add_resource(RESTapp, '/', '/<path:path>', defaults={'path': ''})
问题是此应用程序将所有 URL 重定向到 / 并且我无法在 get() 函数中获取请求的路径。我想在与 Flask 相同的函数中处理所有路径(/ 和'/'),但使用 Flask-RESTful.
类似问题:
- Catch-All URL in flask-restful 提问者 不想捕捉 / 或至少不在与其他 URL-s.[=51= 相同的函数中]
- Flask restful API urls 回答者 提出两个 classess 作为两个资源 。我必须通过
resource_class_kwargs
关键字参数初始化 class 并且 我只想保留一个实例,所以这对我来说不是一件好事 .
我尝试过的:
- 为同一个 class 创建两个
add_resource
调用。它以错误结束。 - 调试
add_resource
。它表明它从端点创建了一个资源视图函数,并将其提供给add_url_rule
函数。否则它的工作原理与随后的两个add_url_rule
函数相同。
通过反复试验,我找到了解决方案,该解决方案既没有记录在案,也不像预期的做法(与 Flask 中的类似,在问题中显示)。
必须为 get()
和其他函数提供 Pythonic 默认参数:get(stuff='DEF_VAL')
有效的完整示例:
from flask import Flask
from flask_restful import Api, Resource
app = Flask(__name__)
api = Api(app)
class RESTapp(Resource):
@staticmethod
def get(path=''): # <-- You should provide the default here not in api.add_resource()!
return 'You want path: \'%s\'' % path # do get something
api.add_resource(RESTapp, '/', '/<path:path>') # Here just the URLs must be the arguments!
if __name__ == '__main__':
app.run()