一个支持api的可定制反馈表单的小框架
feed-gov-back的Python项目详细描述
快速启动
安装软件包:
pip install feed-gov-back
在settings:
INSTALLED_APPS = [ ... 'feedback', ]
在项目url.py中包含反馈urlconf,如下所示:
path('feedback/', include('feedback.services.urls')) or if not using the Api: path('feedback/', include('feedback.urls'))
运行迁移并加载设备:
./manage.py migrate ./manage.py loaddata path/to/fedback/fixtures/*.json
使用make
Makefile提供了一些方便的命令:
make test # run all tests make sdist # run python setup.py sdist to create a local installable
工作原理
FeedbackForm包含一个或多个不同的ElementType模型。这些 模型代表形式及其元素。 每次提交到FeedbackCollection的数据都会被收集,该FeedbackData记录包含 提交的每个表单元素。
由于表单可以放在web资源的不同部分,Placement记录可以创建到 将为申请的不同部分提交的表格数据组合在一起。安置没有 要预先创建,并且可以通过提供表单的唯一放置键动态生成。
rest api被公开以允许在外部操作模型,这在部署时非常有用 进入后端服务。
此外,还提供了接受表单提交的视图,以及用于呈现完整表单的模板标记。 或者是其中的一部分。
表单可以通过api、模型构建,也可以通过django管理员甚至fixture简单地创建。
元素类型
定义了3种元素类型:比例、大文本区域和文本输入。缩放元素可以接收 options覆盖默认值。选项和默认值为:
{ "min": 1, "max": 5, "min_label": "Poor", "max_label": "Excellent", "type": int } It is also possible to explicitly define the scale labels by providing a list of labels instead of the min/max combination ``labels: ["great", "indifferent", "poor"]`` In this case the "type" property of the options should be changed to ``str``
字段可以由提供的form_elementtemplate标记呈现,也可以在模板中手动呈现。
数据收集
数据收集到FeedbackData模型中,分组到FeedbackCollection条目中。 由于反馈表单可以在应用程序的不同部分中使用,因此该模型需要Placement来显示 此表格所涉及的申请或网站部分。如果没有明确提供位置, 将使用默认值。布局id也可以在运行时通过简单地将其作为字符串提供。 将创建新的Placement记录。
设置
Django应用程序中需要以下设置
Setting | Description |
---|---|
AUTH_USER_MODEL | A path to the User model. Defaults to ^{tt16}$ |
DEFAULT_PLACEMENT_KEY | A key to use as default placement if one is not provided. Defaults to ^{tt17}$ |
ANONYMOUS_COLLECTION | A boolean to determine if to force anonymous collection or retain the user if available. Defaults to ^{tt18}$ |
MANAGED_FEEDBACK_MODELS | Set to False to prevent the creation of database models. Defaults to ^{tt18}$ |
用法
包括完整的反馈表:
{% load feedback_form %} {% feedback_form request 'FORM_REFERENCE' %}
或包含特定位置:
{% feedback_form request 'FORM_REFERENCE' 'PLACEMENT_ID' %}
注意,feedback_form标记需要请求通过它才能生成csrf_令牌。
关于上面标记示例中所示的form_引用的一个重要注意事项:form_引用可以是 反馈表单唯一键,它是唯一的uuid、表单模型实例本身或表单的dict表示。 这允许不同的使用模式,具体取决于此软件包的安装位置。 例如,如果要在一个由api和ui层组成的服务上使用反馈表单 应用程序,api可以安装允许创建模型的包,但显然不使用templatetags 因为它没有责任。但是,用户界面可以安装软件包,禁用模型管理,并且只有 通过传递从api调用返回的dict来使用标记。注意,在传递表单模型或dict的情况下 单引号应该省略。示例应用程序演示了这个概念。
造型
实现的模板标记将整个表单包装在id为feedback-form的div中。 随后,每个元素都用一个类feedback-form-element进行div包装。 submit按钮被分类为feedback-form-button。 在每个元素中,以下div包装名称、标签和描述字段: feedback-form-element-name、feedback-form-element-label和feedback-form-element-description
示例应用程序
example目录包含一个使用反馈库的简单django项目。 它提供了一个包含postgres数据库的docker,可以用来隔离示例。 make文件允许基于本地sdist构建安装库。
要运行它,请创建一个虚拟环境并激活它。 然后提供您自己的数据库或docker-compose up使用Docker One。 从:
./manage.py migrate ./manage.py loaddata ./feed/fixtures/*.json ./manage.py runserver
- 您可以通过http://localhost:8000/admin(创建访问管理员的超级用户)创建表单
- 通过http://localhost:8000 与表单交互
- 只使用键加载表单:http://localhost:8000/key
- 使用dict表示加载表单:http://localhost:8000/dict