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如何在堆文件中找到局部变量   java如何使用旧的JSSessionID创建HttpSession?   arrays Java:Arraylist在处理文件时超出范围   可以将Java Retval放入数组中吗   java3d中的几何体碰撞检测?   java从listview和数据库中删除项   Java迭代两个列表,比较然后添加到另一个列表   java应用程序在提交分数排行榜Google Play时崩溃   java Eclipse+Maven Plugin+EGit Plugin=从GitHub签出特定的分支和标记?   Java中的半密码保护Zip文件   java JFrame组件能够通过重绘调用paintComponent,尽管使用flowlayout   带有比较器的Lambda表达式中的java Stream min()和max()方法只返回第一个和最后一个元素,不返回min/max元素   swing Java/Netbeans:JList。getModel()返回一个ListModel而不是DefaultListModel   java我如何使用应用程序。带有LiveData和ViewModel的片段   地理定位在Java中获取用户当前的纬度和经度   为什么在Java中将“this”用作方法参数时会收到此错误消息?   java将字符串转换为JSONArray(或任何数组)