当前位置: 代码迷 >> 综合 >> django lazy user实现
  详细解决方案

django lazy user实现

热度:22   发布时间:2023-12-21 17:09:19.0

代码如下:

 

from people.service import userQueryService class LazyUser(object):def __get__(self, request, obj_type=None):if not hasattr(request, '_cached_user'):request._cached_user = self.get_user(request) return request._cached_userdef get_user(self,request):print 'request.user_id=%s'%request.user_idreturn userQueryService.findUserById(request.user_id)class UserMiddleware(object):def process_request(self, request):print 'user session process_request'request.user_id = request.session.get('_auth_user_id')request.__class__.user = LazyUser()return None

 

 

这里面的魔法代码是

request.__class__.user

 

访问到request.user才会触发__get__方法,并返回数据,这是一个demo:

class LazyUser(object):def __init__(self,id):self.id = iddef __get__(self, request, obj_type=None):if not hasattr(request, '_cached_user'):request._cached_user = self.get_user(request) return request._cached_userdef get_user(self,request):return self.idclass Request(object):passrequest1 = Request()
request1.__class__.user = LazyUser(1)print request1.userrequest2 = Request() 
request2.__class__.user = LazyUser(2)print request2.user
print request1.user    

 

  相关解决方案