python - 使用 django-jsonschema-form 或 django-schemulator 将 jsonschema 渲染为表单
问题描述
JSON Schema片段很容易与 Angular、React 和 Alpaca 等前端 JavaScript 库一起使用,以创建带有验证的 html 表单。这也应该与 Python 解决方案django-jsonschema-form或django-schemulator 一起使用,但我是 Django 新手,在解决它时遇到了很多麻烦。
这是来自AlpacaJS的视频的屏幕截图,它可以轻松传达应该实现的目标:
我已经对上面的两个库进行了一些测试,前者似乎维护得更好,错误更少,是 PyPI 中唯一的一个。
我由 Django 1.11.4 创建的目录树如下所示:
.
├── db.sqlite3
├── jschemaforms
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
├── myproject
│ ├── __init__.py
│ ├── settings.py
│ ├── templates
│ │ ├── base.html
│ │ └── includes
│ ├── urls.py
│ └── wsgi.py
└── README.md
django-jsonschema-form的文档指定了一个类:
# Overriding widgets for all instances of JSONField on PageAdmin form
class PageAdmin(admin.ModelAdmin):
formfield_overrides = {
JSONField: {'widget': JSONSchemaWidget(schema)}
}
这样的类应该在目录树中的什么位置?
schema
是你输入它来定义你的表单的 json 片段
我查看了这个 SO question 中的各种答案以尝试解决:
似乎 forms.py 和 ModelAdmin 对象足以实现这一点,但不确定 ModelAdmin 对象应该存在于树中的哪个位置。
Django如何实现这一点?
- 从 jsonschema 渲染表单
- 在客户端验证用户根据 jsonschema 在表单中输入的内容
- 当用户单击“提交”为 json 时从表单 POST 请求中检索数据
我不确定这两个库是否是答案..
解决方案
该类PageAdmin
位于一个名为 admin.py 的文件中,位于其对应的 model.py 旁边。这是关于发现管理文件的 Django 1.11 文档。
您还必须为您的模型注册管理员。您django.contrib.admin.register
为此使用装饰器。同一页面也有这个装饰器的文档。
用法类似于
from somewhere import Page
from django.contrib import admin
# Overriding widgets for all instances of JSONField on PageAdmin form
@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
formfield_overrides = {
JSONField: {'widget': JSONSchemaWidget(schema)}
}
此代码片段将您的PageAdmin
类注册ModelAdmin
为您的Page
模型。
推荐阅读
- amazon-web-services - 从一个堆栈中分离资源
- multithreading - Foreach object is more faster than foreach -parallel?
- c - 在嵌套循环中访问数组时缓存未命中
- c# - 找到从 A 点移动到 B 点所需的旋转角度
- reactjs - Webpack 为 node_modules 中的文件抛出错误
- python - 无法覆盖在 Django 的 admin/auth 和 admin/widgets 中找到的模板
- python - 二维输入数组的 Keras 标准化
- debugging - 找出 GDB 进程出现段错误的原因
- docker - 无法使用 Flask 和 Docker 卷写入文件
- vue.js - 有没有办法让循环在 Vue3 中创建对象?