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):
    pass

request1 = Request()
request1.__class__.user = LazyUser(1)

print request1.user

request2 = Request() 
request2.__class__.user = LazyUser(2)


print request2.user
print request1.user    

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值