在我的Django项目中,我有一个上下文处理器,它根据请求中的cookie(使用Facebook的Python SDK)返回一个FacebookUser对象。这意味着当用户登录时,我的模板中始终可以使用相应的FacebookUser对象。
但是,当我想在视图中访问它时,我该怎么办?
选项1:在我想要访问此FacebookUser对象的每个视图中,调用上下文处理器方法或执行完全相同操作的方法。
选项2:再次,在每个视图中,调用RequestContext(request)
以便访问由上下文处理器添加到上下文的现有对象。
哪种做法更好,是否有推荐的工作方式?
答案 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