Django中用户资料模型的工具。
项目描述
功能
在请求对象的生命周期内懒加载您的认证 profile 记录。这意味着在Python代码和模板中。
在 settings.AUTH_PROFILE_MODULE 中为您的资料模型命名任何您想要的名称。
安装
获取代码
pip install django-profiletools
在您的settings.py中安装中间件和context_processor
TEMPLATE_CONTEXT_PROCESSORS = ( ... 'profiletools.context_processors.fetch_profile', ) MIDDLEWARE_CLASSES = ( ... 'profiletools.middleware.LazyProfileMiddleware', )
也在settings.py中,将AUTH_PROFILE_MODULE设置为您的资料模型
AUTH_PROFILE_MODULE = "profiles.Profile"
基于此,您的资料模型应该类似于以下内容
# profiles.models.Profile.py from django.contrib.auth.models import User from django.db import models class Profile(models.Model): user = models.OneToOneField(User) def __unicode__(self): return self.user.username
注意:如果您不使用 profiles.models.Profile,例如 members.models.UserProfile,请将 AUTH_PROFILE_MODULE 修改为“members.UserProfile”。
基本用法
在您的模板中
{{ request.my_profile }}
在您的功能视图中
profile = request.my_profile
在您的基于类的视图中
profile = self.request.my_profile
您可以多次调用my_profile,它只加载一次。所以如果在一个视图中调用它100次,SQL SELECT只会在第一次执行。如果没有找到用户,则my_profile的调用结果为 None,这使得处理需要能够处理未认证用户(如 about 页面)的模板变得更容易。
注意:如果您使用的是 members.UserProfile 示例,您需要使用 request.my_userprofile 来调用它。
Python的“is”评估和“type”内置函数的问题
如果您在处理my_profile对象之前使用< strong>is strong>评估,它将以略微令人意外的方式执行
将始终返回false。例如
>>> print(request.my_profile is None) False >>> p = request.user.get_profile() >>> print(request.my_profile is p) False
此外,type内置函数将返回一个django.utils.functional.SimpleLazyObject对象
>>> print(type) <class 'django.utils.functional.SimpleLazyObject'>
请注意,my_profile值中放置的内容不是一个ModelClass实例或None对象,而是一个django.utils.functional.SimpleLazyObject。
如何评估my_profile对象
使用==来评估my_profile对象。这将强制执行对象评估,不会返回令人沮丧的假阳性。
灵感来源
配置文件的懒加载受到了相当令人难以置信的Noah Kantrowitz的启发。
项目详情
django-profiletools-0.2.1.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | feab1ceff0d2cb1be4ae205a22b404bcf9fd8d6c8ef5fcfc3bf0eefb6e25bba6 |
|
MD5 | 36a929601b604da813cbb02c774e8d5e |
|
BLAKE2b-256 | 4e395e0529a6f8a90a3e2aa054094798826636d2fc3cea29fa17d2254ce13a30 |