读书人

django lazy user兑现

发布时间: 2013-05-02 09:39:29 作者: rapoo

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    

?

读书人网 >其他相关

热点推荐