具有用户分辨率和过滤功能的无烧瓶端点

时间:2015-04-09 20:30:46

标签: python flask flask-restless

如何才能正确地查找仅返回属于要求用户的对象的API?

api/version/items/<items_id>

api/version/user/<user_id>/items/<items_id>

在第一种情况下,服务器使用用户ID查询数据库,该用户ID是从其身份验证中获取的。

我不知道如何在Flask-restless中创建这两种情况。我认为预处理器会很有用,我可以从授权中获取user_id(JWT令牌),但我找不到将它用作数据库搜索参数的方法。

from flask_jwt import JWT, jwt_required, current_user
...
manager.create_api(Item,
               methods=['GET'],
               collection_name='items',
               url_prefix='/api',
               preprocessors=dict(GET_SINGLE=[api_auth],GET_MANY=[api_auth]))   


@jwt_required()
def api_auth(*args, **kwargs):
    user_id = current_user.id
    # some code with user id addition.
    pass

2 个答案:

答案 0 :(得分:0)

预处理器将是您构建查询对象的位置。我认为项目的端点应该看起来像:

444

但是在预处理器中,您将构建一个将与请求一起传递的查询对象:

api/version/items

答案 1 :(得分:0)

您应该使用直接引用您尝试查询的资源的端点。例如:

Date

您应该分别定义$eval [ComImport] [Guid("00000114-0000-0000-C000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IOleWindow { void GetWindow(out IntPtr phwnd); void ContextSensitiveHelp([In, MarshalAs(UnmanagedType.Bool)] bool fEnterMode); } 预处理器。应该使用多个预处理器的单个(整数)和api/version/items 参数(字典)的get_single来定义返回给用户的内容。

来自Flask-restless docs

  

接受字典的预处理器和后处理器   参数可以(并且应该)就地修改它们的参数。那   表示对例如结果字典所做的更改   通过Flask-Restless视图功能看到并最终返回   客户。

因此,在预处理器中,您可以执行以下操作来检索数据库中的项目(在与用户的关系中定义):

get_many