跳转到主要内容

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评估,它将以略微令人意外的方式执行

将始终返回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 (14.8 kB 查看哈希)

上传时间

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面