django的平面文件模型实例

yamdl的Python项目详细描述


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

允许您将django模型的实例存储为平面文件(简化的装置)。 因为当您想在git repo中存储内容,但仍然希望能够 使用普通的Django ORM方法和快捷函数

它的工作原理是在启动时将数据加载到内存中的sqlite数据库中,然后 然后在那里提供查询。这意味着它会给你的应用程序增加一点时间 启动,并稍微使用更多的RAM,但有一个更容易的时间优势 处理静态文件(而不是直接加载它们的自定义代码)。

它不会将对模型的更改持久化回文件中—这纯粹是为了 在文本编辑器中编写内容并通过django使用它。

由于python的限制,yamdl目前只在python 3.4和更高版本上工作。

为什么不使用普通的固定装置?

它们不仅有点冗长,而且需要加载到非内存中 数据库(速度较慢),如果要更新 或删除现有条目。对于任何 有很多数据或者需要连接。

安装

首先,安装软件包:

pip install yamdl

然后,将其添加到INSTALLED_APPS

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

然后,将内存中的数据库添加到DATABASES(注意,必须在 至少python 3.4有一个能够理解共享内存uri的sqlite模块:

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

启动django时,无论是runserver还是在生产环境中,它都将读取 yaml文件并将它们加载到内存数据库中,然后让您查询它们 使用所有标准的ORM工具

待办事项

下面是我在1.0之前想做的事情的简短列表:

  • 也许用更好的东西替换__yamdl__属性。
  • 支持3.4之前的Python版本,可以使用带有线程锁定的全局SQLite:memory:实例,也可以使用擦除阶段支持磁盘数据库
  • 在Django自动重载程序中包含YAML文件,以便编辑它们可以加载开发中的更改
  • 可能使用mtime检查将更改加载到生产中的平面文件

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java循环来评估所有运算符   spring@Value>无法转换“java”类型的值。lang.String“to required type”java。lang.Integer'   注册表为什么我又找不到Java SE运行时环境了?   java Intellij Spring启动运行配置   多线程如何在Java中从工作线程访问主线程?   groovy在grails应用程序中使用java代码会导致编译永无止境的循环   java从我使用switch的方法中获取2d数组   java在JVM内存的方法区域中有非静态和静态区域吗?   java验证正则表达式匹配器。find()找不到准确的键和值   java地理定位API和在半径内查找用户   java如何在正则表达式中使用逗号作为结束点?   更新关系时java Update@LastModifiedDate   数组如何在java中从同一个包中的另一个类访问变量   JVM规范和Java编译器代码对SCJP准备有用吗?   java liquibase如何获取hibernate事务?   java如何在jersey client 1.8中处理读取超时异常