首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

django lazy user兑现

2013-05-02 
django lazy user实现代码如下:?from people.service import userQueryService class LazyUser(object):de

django lazy user实现

代码如下:

?

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_user        def get_user(self,request):        print 'request.user_id=%s'%request.user_id        return 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 = id            def __get__(self, request, obj_type=None):        if not hasattr(request, '_cached_user'):            request._cached_user = self.get_user(request)         return request._cached_user        def get_user(self,request):        return self.id    class Request(object):    passrequest1 = Request()request1.__class__.user = LazyUser(1)print request1.userrequest2 = Request() request2.__class__.user = LazyUser(2)print request2.userprint request1.user    

?

热点排行