跳转到主要内容

Django 的扁平文件模型实例

项目描述

https://img.shields.io/pypi/v/yamdl.svg https://img.shields.io/pypi/l/yamdl.svg

允许您将 Django 模型的实例存储为扁平文件(简化型 fixtures)。当您想在 Git 仓库中存储内容,但仍想使用正常的 Django ORM 方法及快捷函数时,此功能非常有用。

它通过在启动时将数据加载到内存中的 SQLite 数据库,然后从那里提供查询来实现。这意味着它会在您的应用程序启动时添加一点时间,但与静态文件相比,它仍然允许您编写查询并拥有动态视图,同时查询返回在微秒级别,速度极快。

它不会将模型更改持久化回文件中 - 这完全是用于在文本编辑器中创作内容并通过 Django 使用它。

为什么不使用正常的 fixtures 呢?

它们不仅有点啰嗦,而且需要加载到非内存数据库(较慢)中,并且您需要很多逻辑来确定是否应该更新或删除现有条目。

安装

首先,安装此包

pip install yamdl

然后,将其添加到 INSTALLED_APPS

INSTALLED_APPS = [
    ...
    'yamdl',
    ...
]

然后,将内存数据库添加到 DATABASES

DATABASES = {
    ...
    'yamdl': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'file:yamdl-db?mode=memory&cache=shared',
    }
}

然后,添加一个 YAMDL_DIRECTORIES 设置,该设置定义了您的 YAML 文件目录的位置(它是一个列表)

YAMDL_DIRECTORIES = [
    os.path.join(PROJECT_DIR, "content"),
]

最后,添加数据库路由器

DATABASE_ROUTERS = [
    "yamdl.router.YamdlRouter",
]

使用方法

首先,将 __yamdl__ 属性添加到您想要使用静态内容的模型。一个模型只能是静态的或动态的,不能两者都是

class MyModel(models.Model):
    ...
    __yamdl__ = True

然后,在上述 YAMDL_DIRECTORIES 设置中列出的目录之一下开始创建静态文件。在这些目录中的一个中,创建一个格式为 appname.modelname 的目录,然后创建以 .yaml 结尾的 YAML 文件。

andrew-site/
    content/
        speaking.Talk/
            2017.yaml
            2016.yaml

在这些 YAML 文件中,您可以定义一个模型实例列表,如下所示

- title: 'Alabama'
  section: us-states

- title: 'Alaska'
  section: us-states
  done: 2016-11-18
  place_name: Fairbanks

- title: 'Arizona'
  section: us-states
  done: 2016-05-20
  place_name: Flagstaff

或者顶层一个单独的模型实例,如下所示

conference: DjangoCon AU
title: Horrors of Distributed Systems
when: 2017-08-04
description: Stepping through some of the myriad ways in which systems can fail that programmers don't expect, and how this hostile environment affects the design of distributed systems.
city: Melbourne
country: AU
slides_url: https://speakerdeck.com/andrewgodwin/horrors-of-distributed-systems
video_url: https://www.youtube.com/watch?v=jx1Hkxe64Xs

您还可以在文档分隔符下方定义一个 Markdown 文档(以 .md 结尾),它将被加载到名为 content 的列中。

date: 2022-01-18 21:00:00+00:00
image: blog/2022/241.jpg
image_expand: true
section: van-build
slug: planning-a-van
title: Planning A Van

---

What's In A Van?
----------------

So, I have decided to embark on my biggest project to date (and probably for a while, unless I finally get somewhere to build a cabin) - building myself a camper van, from scratch. Well, from an empty cargo van, anyway.

文件可以嵌套在其模型目录的任何级别下,因此如果您想的话,可以在目录中分组文件(例如,按年份分组博客文章)。

这些文件也被添加到 Django 自动加载器中,所以如果您正在使用开发服务器,那么在编辑文件时会重新加载(这样您可以看到实时反映的变化 - 它们仅在服务器启动时读取)。

项目详情


下载文件

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

源分发

yamdl-1.0.0.tar.gz (6.0 kB 查看哈希值)

上传时间

构建分发

yamdl-1.0.0-py3-none-any.whl (6.5 kB 查看哈希值)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面