我在django中开发了一个rest API后开始使用Flask。我想开始使用Flask并构建一个JSONRPC API。我正在使用python 3.4,我想知道如何(以及如果)我可以使用类来实现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端点实现身份验证,并且在使用类时我可以创建一个身份验证类并使用
class Index(Auth, SomeOtherBehaviour):
def mymethod(self,a)
return 'a'
我是否正确地看待它(来自Django,这看起来很熟悉),还是有其他/更好的方式在Flask中如何做到这一点?
答案 0 :(得分:2)
这取决于API的用途。
如果您试图允许客户:
-获取有关对象的信息
-创建和存储新对象
-更新旧对象
-删除现有对象
然后,您将基于Resources创建一个API(资源=对象实例),并且您应该使用RESTful api,例如flask-Restful。如果您创建网站并尝试组织这些资源,将它们存储在数据库中,显示它们并通过api与它们进行交互,则应该使用Django,因为所有这些问题都已经使用Django的ORM解决了。
如果您试图允许客户:
-根据参数向服务器远程发布命令之类的功能
然后,您正在创建RPC API,应使用类似flask-jsonrpc的内容。
祝你项目顺利。
答案 1 :(得分:1)
看看Flask-Restful。它为您提供了基于类的视图,这些视图与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的基于类的端点,如果您对基于类的功能(我不熟悉Django)真的感兴趣,只需将它们用作RPC端点,您可能还想看看blueprints。 Flask-Restful只是为您提供了编写RESTful API的方法,但并不能让您做到。
至于身份验证,我们在Flask应用程序中所做的是编写一个装饰器来检查auth-token并在请求进入时对其进行验证。所以像这样:
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
装饰器。