跳转到主要内容

Django Solo帮助处理单例对象

项目描述

Django Solo

+---------------------------+
|                           |
|                           |
|             \             | Django Solo helps working with singletons:
|             /\            | database tables that only have one row.
|           >=)'>           | Singletons are useful for things like global
|             \/            | settings that you want to edit from the admin
|             /             | instead of having them in Django settings.py.
|                           | 
|                           | 
+---------------------------+

功能

Solo帮助你在Django中强制只实例化一个模型对象。

  • 你定义将保存你的单例对象的模型。
  • django-solo为你的模型和admin类提供辅助父类。
  • 你将获得一个知道只有一个对象的admin界面。
  • 你可以从模板中检索对象。
  • 通过启用缓存,数据库不会被密集查询。

用例

Django Solo也适用于与具有一对多关系的单例对象一起使用。例如,下面的“首页幻灯片”具有许多“幻灯片”。

  • 全局或默认设置
  • 具有许多幻灯片的图片幻灯片
  • 具有子部分的页面部分
  • 具有许多团队成员的团队简介

在一对多关系中,父对象限制为单个实例的情况有很多。

使用示例

# models.py

from django.db import models
from solo.models import SingletonModel


class SiteConfiguration(SingletonModel):
    site_name = models.CharField(max_length=255, default='Site Name')
    maintenance_mode = models.BooleanField(default=False)

    def __str__(self):
        return "Site Configuration"

    class Meta:
        verbose_name = "Site Configuration"
# admin.py

from django.contrib import admin
from solo.admin import SingletonModelAdmin
from config.models import SiteConfiguration


admin.site.register(SiteConfiguration, SingletonModelAdmin)
# There is only one item in the table, you can get it this way:
from .models import SiteConfiguration
config = SiteConfiguration.objects.get()

# get_solo will create the item if it does not already exist
config = SiteConfiguration.get_solo()

在您的模型中,请注意您不需要提供 verbose_name_plural 字段 - 这是因为 Django Solo 使用的是 verbose_name

如果您正在将现有的模型(已存储在数据库中的一些对象)更改为单例模型,您可以明确地为 django-solo 提供数据库中行的 id。这可以通过在模型上设置 singleton_instance_id 属性来完成。

class SiteConfiguration(SingletonModel):
    singleton_instance_id = 24
    # (...)

安装

此应用程序需要 Django 3.2、4.0 或 4.1。

  • 使用 pip install django-solo 安装此包
  • solosolo.apps.SoloAppConfig 添加到您的 INSTALLED_APPS 设置中。

这就是您运行测试的方式

./manage.py test solo --settings=solo.tests.settings

并在 tox 内部

python -m pip install tox
tox

支持的语言

  • 英语
  • 西班牙语
  • 德语

管理

标准的 Django 管理界面在处理单例时不太适用,例如,如果您需要在管理界面中编辑一些全局网站设置。Django Solo 提供了一个修改后的管理界面用于此。

django-solo admin

  • 在列出所有应用程序的主管理页面中,我们有一个 config 应用程序,其中包含用于网站配置的单例模型。
  • 配置对象只能更改,没有“添加”链接(1)。
  • 到配置页面的链接(2)直接进入表单页面 - 由于只有一个对象,因此不需要中间的对象列表页面。
  • 编辑页面有一个修改过的面包屑(3),以避免链接到中间对象列表页面。
  • 从编辑页面,我们无法删除对象(4),也不能添加新的对象(5)。

如果您希望禁用跳过对象列表页面的功能,并使用默认的面包屑,您应该在设置中将 SOLO_ADMIN_SKIP_OBJECT_LIST_PAGE 设置为 False

在模板中可用性

可以通过给出 Django 模型点路径来从模板检索单例对象

{% get_solo 'app_label.ModelName' as my_config %}

示例

{% load solo_tags %}
{% get_solo 'config.SiteConfiguration' as site_config %}
{{ site_config.site_name }}
{{ site_config.maintenance_mode }}

如果您正在扩展模板,请确保在适当的范围内使用标签。

正确

{% extends "index.html" %}
{% load solo_tags %}

{% block content %}
    {% get_solo 'config.SiteConfiguration' as site_config %}
    {{ site_config.site_name }}
{% endblock content %}

错误

{% extends "index.html" %}
{% load solo_tags %}
{% get_solo 'config.SiteConfiguration' as site_config %}

{% block content %}
    {{ site_config.site_name }}
{% endblock content %}

缓存

默认情况下,缓存被禁用:每次 get_solo 检索单例对象时,都会进行数据库查询。

您可以通过启用缓存,仅在最初检索对象时查询数据库。当从管理界面进行更新时,缓存也会被更新。

缓存超时时间由 SOLO_CACHE_TIMEOUT 设置控制。要使用的缓存后端由 SOLO_CACHE 设置控制。

设置

模板标签名称

您可以使用 get_solo 模板标签在模板中检索您的单例对象。

您可以使用 GET_SOLO_TEMPLATE_TAG_NAME 设置更改 get_solo 的名称。

GET_SOLO_TEMPLATE_TAG_NAME = 'get_config'

管理覆盖标志

默认情况下,管理被覆盖。但如果您希望保留对象列表页面(例如,以自定义操作),您可以将 SOLO_ADMIN_SKIP_OBJECT_LIST_PAGE 设置为 False

SOLO_ADMIN_SKIP_OBJECT_LIST_PAGE = True

缓存后端

Django 提供了通过 CACHES 设置定义多个缓存后端的方法。如果您希望单例对象单独缓存,可以像这样定义 CACHESSOLO_CACHE 设置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    },
    'local': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
}

SOLO_CACHE = 'local'

如果设置为 None,则将禁用缓存。

缓存超时

缓存超时时间(以秒为单位)。

SOLO_CACHE_TIMEOUT = 60*5  # 5 mins

缓存前缀

用于缓存键的前缀。

SOLO_CACHE_PREFIX = 'solo'

获取代码

代码托管在 https://github.com/lazybird/django-solo/

使用以下方式匿名查看最新开发版本

$ git clone git://github.com/lazybird/django-solo.git

您可以使用以下方式在“可编辑”模式下安装包

pip uninstall django-solo  # just in case...
pip install -e git+https://github.com/lazybird/django-solo.git#egg=django-solo

您还可以安装特定的分支

pip install -e git+https://github.com/lazybird/django-solo.git@my-branch#egg=django-solo

包现在已安装到您的项目中,您可以找到代码。

要运行单元测试

pip install tox
tox

发布版本

  1. 更新 solo/__init__.py 版本

  2. 更新 CHANGES

  3. 在GitHub上发布新版本

  4. 将发布版本上传到PyPI

tox -e build
tox -e upload

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django_solo-2.3.0.tar.gz (13.1 kB 查看散列)

上传时间

构建分布

django_solo-2.3.0-py3-none-any.whl (16.3 kB 查看散列)

上传时间 Python 3