[英]Accepting multiple parameters in flask-restful add_resource()
[英]Why does Flask-RESTful' add_resource() has a parameter for URLs and another one for endpoints?
我正在使用 Flask 和 Flask-RESTful 扩展开发 API。 我正在创建我的端点和资源,但我对资源“url”和它的“端点”之间的区别感到困惑。 据我了解,URL 本身就是端点。 我也在阅读这个 StackOverflow 问题的答案,他们还建议 URL 是一个端点。
然而Flask-RESTful 文档提到add_resource
方法有一个 URL 参数,它也可以接收一个端点名称。 他们甚至提供了这个例子:
api.add_resource(HelloWorld, '/', '/hello')
api.add_resource(Foo, '/foo', endpoint="foo")
api.add_resource(FooSpecial, '/special/foo', endpoint="foo")
我了解他们在做什么,但我还是不明白端点名称的作用。
URL 和端点名称有什么区别? 为什么要设置端点名称?
从文档中:
URL
一个或多个 url 路由以匹配资源,标准 flask 路由规则适用。 任何 url 变量都将作为参数传递给资源方法。
端点
端点名称(默认为 Resource。名称.lower() 可用于在字段中引用此路由。Url 字段
当您打算管理具有相同 class 的两个或多个 url 时,必须指定端点参数,实际上,考虑以下代码片段:
from flask import Flask, request
from flask_restful import Api, Resource
class my_handler(Resource):
def get(self):
return request.base_url
app = Flask(__name__)
api = Api(app)
api.add_resource(my_handler, '/')
api.add_resource(my_handler, '/hello')
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
flask 将无法执行应用程序,引发异常:
Exception has occurred: AssertionError
View function mapping is overwriting an existing endpoint function: my_handler
为了让 flask 处理具有相同 class 的多个 url,您需要指定端点参数:
from flask import Flask, request
from flask_restful import Api, Resource
class my_handler(Resource):
def get(self):
return request.base_url
app = Flask(__name__)
api = Api(app)
api.add_resource(my_handler, '/', endpoint='/')
api.add_resource(my_handler, '/hello', endpoint='/hello')
if __name__ == '__main__':
app.run(host="0.0.0.0", port=5000)
通过进行 http 调用,服务器通过返回所请求资源的 url 进行响应:
curl --location --request GET http://127.0.0.1:5000/
"http://127.0.0.1:5000/"
curl --location --request GET http://127.0.0.1:5000/hello
"http://127.0.0.1:5000/hello"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.