Flask class 基于 API 和 jsonrpc
Flask class based API and jsonrpc
我在 django 中开发了 rest API 之后才开始使用 Flask。我想开始使用 Flask 并构建一个 JSONRPC API。我正在使用 python 3.4,我想知道我如何(以及是否)可以使用 classes 来实现 API,而不是我目前所见教程中描述的方式。
例如:
@jsonrpc.method('app.index')
def index(a):
return 'hello {a}'.format(a=a)
我可以做类似的事情吗:
class Index()
def mymethod(self, a)
return 'hello {a}'.format(a=a)
有人能给我指出正确的方向吗,如果这样的构造是可能的吗?
重点是我想为我的所有 API 端点实施身份验证,当使用 classes 时,我可以进行身份验证 class 并使用
class Index(Auth, SomeOtherBehaviour):
def mymethod(self,a)
return 'a'
我是否以正确的方式寻找它(来自 Django,这看起来很熟悉)或者有 another/better 在 Flask 中如何完成的方式?
看看Flask-Restful。它为您提供了基于 class 的视图,这些视图与 HTTP 动词相结合,并且会减轻路由带来的痛苦。该框架提供了上述动词路由、输入验证和 JSON 编组。
class FooResource(Resource):
def get(self, name):
return 'hello {0}'.format(name)
def post(self):
# save data or pass data to DjangoAPI
return 201
编辑:
您可以使用 Flask-Restful 的基于 class 的端点,如果您真的对基于 class 的功能感兴趣(我不熟悉 Django),只需将它们用作 RPC 端点,您可能还想看看 blueprints。 Flask-Restful 只是给你写 RESTful API 的方法,但不会让你成为
至于身份验证,我们在 Flask 应用程序中所做的是编写一个装饰器来检查身份验证令牌并在请求传入时对其进行验证。所以像这样:
def authenticate(func=None, *, roles=None):
if func is None:
return partial(authenticate, roles=roles)
@wraps(func)
def wrapper(*args, **kwargs):
try:
if authorization_check():
result = func(*args, **kwargs)
else:
result = flask.abort(401)
except ResourceNotFoundException:
result = flask.abort(404)
return result
return wrapper
然后您的端点只需要一个 @authenticate
装饰器。
这取决于 API 的目的。
如果您试图让客户:
- 获取有关对象的信息
- 创建并存储一个新对象
- 更新旧对象
- 删除现有对象
然后您创建了一个基于 Resources 的 API(资源 = 对象实例),您应该使用 RESTful api,例如 flask-Restful。如果你创建一个网站并试图组织这些资源,将它们存储在数据库中,显示它们,并通过 api 与它们交互,你应该使用 Django,因为所有这些问题都已经用 Django 的 ORM 解决了。
如果您试图让客户:
- 根据参数
远程向服务器发出类似命令的功能
然后你正在创建一个 RPC API 并且应该使用像 flask-jsonrpc.
这样的东西
祝你项目顺利。
我在 django 中开发了 rest API 之后才开始使用 Flask。我想开始使用 Flask 并构建一个 JSONRPC API。我正在使用 python 3.4,我想知道我如何(以及是否)可以使用 classes 来实现 API,而不是我目前所见教程中描述的方式。
例如:
@jsonrpc.method('app.index')
def index(a):
return 'hello {a}'.format(a=a)
我可以做类似的事情吗:
class Index()
def mymethod(self, a)
return 'hello {a}'.format(a=a)
有人能给我指出正确的方向吗,如果这样的构造是可能的吗?
重点是我想为我的所有 API 端点实施身份验证,当使用 classes 时,我可以进行身份验证 class 并使用
class Index(Auth, SomeOtherBehaviour):
def mymethod(self,a)
return 'a'
我是否以正确的方式寻找它(来自 Django,这看起来很熟悉)或者有 another/better 在 Flask 中如何完成的方式?
看看Flask-Restful。它为您提供了基于 class 的视图,这些视图与 HTTP 动词相结合,并且会减轻路由带来的痛苦。该框架提供了上述动词路由、输入验证和 JSON 编组。
class FooResource(Resource):
def get(self, name):
return 'hello {0}'.format(name)
def post(self):
# save data or pass data to DjangoAPI
return 201
编辑: 您可以使用 Flask-Restful 的基于 class 的端点,如果您真的对基于 class 的功能感兴趣(我不熟悉 Django),只需将它们用作 RPC 端点,您可能还想看看 blueprints。 Flask-Restful 只是给你写 RESTful API 的方法,但不会让你成为
至于身份验证,我们在 Flask 应用程序中所做的是编写一个装饰器来检查身份验证令牌并在请求传入时对其进行验证。所以像这样:
def authenticate(func=None, *, roles=None):
if func is None:
return partial(authenticate, roles=roles)
@wraps(func)
def wrapper(*args, **kwargs):
try:
if authorization_check():
result = func(*args, **kwargs)
else:
result = flask.abort(401)
except ResourceNotFoundException:
result = flask.abort(404)
return result
return wrapper
然后您的端点只需要一个 @authenticate
装饰器。
这取决于 API 的目的。
如果您试图让客户:
- 获取有关对象的信息
- 创建并存储一个新对象
- 更新旧对象
- 删除现有对象
然后您创建了一个基于 Resources 的 API(资源 = 对象实例),您应该使用 RESTful api,例如 flask-Restful。如果你创建一个网站并试图组织这些资源,将它们存储在数据库中,显示它们,并通过 api 与它们交互,你应该使用 Django,因为所有这些问题都已经用 Django 的 ORM 解决了。
如果您试图让客户:
- 根据参数
然后你正在创建一个 RPC API 并且应该使用像 flask-jsonrpc.
这样的东西祝你项目顺利。