据我所知,到目前为止,有两种方法可以使用flask框架将资源绑定到端点,
第一个是使用@app.route
装饰器,如下所示:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
第二种方法是在flask-restfull中创建一个继承自Resources
的类,该类包含http方法作为函数,我们使用add_resource
方法将其绑定到端点,如下所示:
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
def get(self):
return 'Hello, World!'
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run()
据我所知,这两种不同的语法做同样的事情,我不明白两者之间有什么区别?或者是针对特定类型的应用而设计的,另一种是针对其他类型的应用而设计的?
答案 0 :(得分:1)
Flask-RESTful是Flask的扩展,它本身是基于Werkzeug提供的许多出色实用程序构建的。
from flask import Flask
app = Flask(__name__)
@app.route('/foo')
def say_foo():
return 'foo'
@app.route('/bar')
def say_bar():
return 'bar'
if __name__ == '__main__':
app.run()
REST背后的最大创意之一就是使用HTTP与资源进行交互。这段代码的问题是我们的资源被划分为多种方法。没有封装。尽管API本身包含REST的基本元素,但是代码完全无法捕获这些想法。这是不好的!我们的内部代码没有理由不应该与API的外观相匹配。
使用Flask-RESTful
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class Foo(Resource):
def get(self):
return 'foo'
class Bar(Resource)
def get(self):
return 'bar'
# As you might have guessed, these two lines add a given resource to our API at the
# specified route. We no longer need to enumerate what methods a route supports,
# since Flask-RESTful resolves this information by inspecting what methods you've
# defined on your resource object.
api.add_resource(Foo, '/foo')
api.add_resource(Bar, '/bar')
if __name__ == '__main__':
app.run()
我们现在有课!这是一笔大买卖。现在,我们的路线直接映射到对象。更好的是,给定类上的方法与它们的HTTP对应方法完全相同。我们不再需要像say_foo
这样的路由上处理命名方法,因为HTTP方法与类中的方法之间存在一对一的映射。