如何使用django-tastypie获取当前登录的用户资源

时间:2013-03-07 22:49:04

标签: session backbone.js tastypie

我正在使用带有django的backbone.js,我想在我的应用程序/的初始请求之后立即获取当前登录的用户。

我确实设置了UserResource,因此我可以拨打api api/v1/user/id,但这意味着我必须知道id我正在寻找哪些我不会。在传统的django请求视图中,我将拥有request.user对象。这也是我在客户端可以使用的,如果不能,我如何拨打电话获取request.user

编辑:

由于我正在使用Django的传统身份验证,并在授权用户之后,骨干从那里开始。我可以在我的base.html文件中创建一个变量来存储当前登录用户的唯一ID,如下所示:

var user = {{user}}; // which shows the username 

这是否有任何风险

2 个答案:

答案 0 :(得分:6)

查看TastyPie Cookbook中的“创建每用户资源”示例

http://django-tastypie.readthedocs.org/en/latest/cookbook.html#creating-per-user-resources

但是,文档已过时,API已更改。方法签名已更改,请求现在是捆绑包的属性。

def authorized_read_list(self,object_list,bundle):

您可以从bundle.request.user

访问该用户

另见https://github.com/toastdriven/django-tastypie/issues/809

答案 1 :(得分:0)

以下内容将用户ID放在响应的元数据中:

def alter_list_data_to_serialize(self, request, data_dict):
    if isinstance(data_dict, dict):
        if 'meta' in data_dict:
            if request.user and request.user.pk:
                data_dict['meta']['user_id'] = request.user.pk

    return data_dict

就个人而言,我从来没有必要这样做。我将用户对象放入页面上下文服务器端。即使对于单页RESTful应用程序,我也会在登录时进行标准请求/响应(不是AJAX),并填充内容/上下文服务器端。

任何后续的AJAX请求都不应包含用户ID,其方式与不应在URL中传递suer id的方式相同。您应该识别用户服务器端并相应地进行过滤。 Django使这很容易,使用AuthenticationMiddleware暴露用户。