Django:视图中的上下文处理器,不好的做法?

时间:2011-07-08 09:40:15

标签: python django

在我的Django项目中,我有一个上下文处理器,它根据请求中的cookie(使用Facebook的Python SDK)返回一个FacebookUser对象。这意味着当用户登录时,我的模板中始终可以使用相应的FacebookUser对象。

但是,当我想在视图中访问它时,我该怎么办?

选项1:在我想要访问此FacebookUser对象的每个视图中,调用上下文处理器方法或执行完全相同操作的方法。

选项2:再次,在每个视图中,调用RequestContext(request)以便访问由上下文处理器添加到上下文的现有对象。

哪种做法更好,是否有推荐的工作方式?

3 个答案:

答案 0 :(得分:3)

如果您需要大量的FacebookUser对象,请使用中间件。 Documentation is here

对于示例中间件类:

class FacebookApiIntegrator(object):

    def process_request(self, request):
        if request.user.is_authenticated():# check if user has logged in
            request.facebook = <your profile func or obj..>

在任何视图中你都可以使用:

request.facebook

但请不要忘记,您的middeleware将针对每个请求运行,并添加您的Facebook个人资料对象以请求登录用户的每个请求。因此,将中间件用于不经常使用的对象并不是一个好主意。

答案 1 :(得分:1)

选项1.将上下文处理器的工作委托给另一个函数,然后调用该函数。

答案 2 :(得分:0)

您已经在使用中间件。

https://docs.djangoproject.com/en/1.3/topics/http/middleware/#middleware

您只需要实现process_request,并在每个请求中完成。

https://docs.djangoproject.com/en/1.3/topics/http/middleware/#process_request