代码如下:
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
相关推荐
django version: 1.7.1 最简单的推荐: 使用abstractuser扩充fields ...from django.utils.translation import ugettext_lazy as _ # Create your models here. class KarmaUser(AbstractUser): karma = models.Positiv
Django会自动创建一个名为`user`的数据库表,包含username、email和created_at三列。 三、数据操作 1. 创建(Create):使用`.save()`方法创建新记录。 ```python new_user = User(username='testuser', email='...
基于类的视图是一种更加灵活的方式,允许你通过继承自 Django 内置的视图类来实现复杂的功能。 ##### 3.3 基于类的视图 基于类的视图提供了一种更高级的方式来组织和重用代码。 例如,创建一个基于类的视图来显示...
本文档作为对上一篇关于Django用户登录注册等内容的延续,主要聚焦于如何利用第三方库Crispy Forms来实现前端页面的美化与优化。对于初学者而言,掌握Django前端模板的应用以及如何结合Bootstrap框架来提升用户体验...
from django.utils.translation import gettext_lazy as _ class MyUser(AbstractBaseUser): identifier = models.CharField(max_length=40, unique=True) email = models.EmailField(_('email address'), unique...
3. **自动分页**:对于大数据集的展示,`django-lazycrud` 提供了自动分页功能,帮助开发者轻松实现前端的分页展示。 4. **简洁的 CRUD 方法**:库为每个模型提供了简单的 CRUD 方法,如 `create()`, `read()`, `...
1. 模型(Models):扩展Django的User模型,添加一个"lazy_user"状态来标识未完全注册的用户。 2. 视图(Views):提供处理用户升级其帐户到完整用户的过程。 3. 表单(Forms):可能包括用于完成注册的表单。 4. ...
ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'user.patient', but app 'users' isn’t installed. ``` 这个错误意味着Django尝试引用一个不存在的应用(`users`)中的模型...
默认情况下,SQLAlchemy使用懒加载(Lazy Loading),即只有在需要访问关联对象时才执行额外的SQL查询。为了减少数据库交互次数,我们可以使用`joinedload`或`subqueryload`来实现嵌套式加载: ```python user_...
如果你想将Django管理界面的语言设置为中文,可以在`settings.py`文件开头导入`ugettext_lazy`,然后更改`LANGUAGE_CODE`和`LANGUAGES`设置: ```python from django.utils.translation import ugettext_lazy as _ ...
当我们需要合并或连接两个或更多的QuerySet时,通常有多种方法可以实现。本篇文章将详细探讨如何在Django中拼接两个QuerySet,以及相关的筛选和集合操作。 **一、QuerySet的拼接** 1. **使用`|`操作符拼接** ...
Lazy-Balancer 项目起源于好哥们需要一个 7 层负载均衡器,无奈商业负载均衡器成本高昂,操作复杂。又没有特别喜欢(好看,好用)的开源产品,作为一名大 Ops 怎么能没有办法?正好最近在看 Django 框架,尝试...
Django的ORM也提供了丰富的查询API,可以轻松实现复杂的查询操作。 例如,如果你想获取所有电子邮件地址以'@gmail.com'结尾的用户,你可以这样做: ```python from django.db.models import Q users = User....
role = db.relationship('Role', backref=db.backref('users', lazy=True)) class Role(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), unique=True, nullable=...
- **Node.js/Python/Django/Ruby on Rails**: 可能使用的后端语言和框架,用于处理请求、管理数据库和与API交互。 - **RESTful API**: 设计和实现符合REST原则的接口,使前后端能够有效通信。 - **Authentication...