轻松将Open Forms集成到您的Django应用程序中。
项目描述
Open Forms Client (for Django)
- 版本::
0.4.0
- 源::
https://github.com/open-formulieren/open-forms-client-django
- 关键词::
Open Forms, Client, Django
- Python版本::
3.7
关于
轻松将Open Forms集成到您的Django应用程序中。主要有3个主要功能
在Django管理中添加了连接到Open Forms的配置。
在任意的Django模型中添加一个OpenFormsField,您就可以在Django管理或其他Django表单中选择Open Forms中的表单列表。
您可以得到templatetags来在网页中渲染Open Forms表单。
如果您已安装Sentry并启用了Django管理配置页面上的Sentry,它将使用您现有的配置连接到Sentry。
安装
要求
Python 3.7或更高版本
Django 3.2或更高版本
安装
您可以通过Python包索引(PyPI)或从源安装Open Forms Client。
使用pip安装
pip install django-open-forms-client
用法
要使用此项目,您需要遵循以下步骤
将open_forms_client添加到Django项目的settings.py文件中的INSTALLED_APPS。
INSTALLED_APPS = ( # ..., "openformsclient", )
将一个OpenFormsField添加到你的相关模型中(例如一个Page模型)。
from openformsclient.models import OpenFormsField class Page(models.Model): # ... form = OpenFormsSlugField(blank=True)
还有一个OpenFormsUUIDField,它存储表单的UUID而不是“slug”。这更精确,但如果有人在Open Forms中替换了表单,UUID将改变,但slug可能保持不变。
将templatetags {% openforms_sdk_media %} 和 {% openforms_form page.form %} 添加到你的模板中,以渲染Open Forms表单。
{% load openforms %} <!-- Optional to render Open Forms in the proper language --> <html lang="nl"> <head> <!-- Required for icons used by Open Forms --> <meta charset="utf-8"> {% openforms_sdk_media %} </head> <body> {% if page.form %} {% openforms_form page.form %} {% else %} <p>This page has no form</p> {% endif %} </body> </html>
在管理员界面下,在Open Forms客户端配置中配置你的Open Forms连接和设置。一旦状态字段显示绿色图标,配置就正常工作了。
完成。
注意事项
Open Forms配置
请注意,这些不是你自己的web应用程序中的设置,但它们应该在Open Forms安装中正确设置。
ALLOWED_HOSTS包含你的域名。
CSRF_TRUSTED_ORIGINS包含你的域名。
CSRF_COOKIE_SAMESITE应该是"none"。
CSP头部
当你的web应用程序使用CSP头部时,你需要将csp_nonce传递给openforms_form templatetag。如果你使用Django-CSP,你可以这样做
{% load openforms %}
{% openforms_form page.form csp_nonce=request.csp_nonce %}
此外,你需要允许你的web应用程序从Open Forms SDK加载样式和脚本,并连接到Open Forms API。当使用Django-CSP时,需要在你的settings.py中更改一些选项
# The Open Forms SDK files might differ from the API domain. Note that this
# the same domain as configured in the Open Forms configuration model. You
# might do something smart to use that value here.
OPEN_FORMS_API_DOMAIN = "forms.example.com"
OPEN_FORMS_SDK_DOMAIN = OPEN_FORMS_API_DOMAIN
# Allow your webapp to load styles from Open Forms SDK.
CSP_STYLE_SRC = ("'self'", OPEN_FORMS_SDK_DOMAIN)
# Allow your webapp to load script from Open Forms SDK.
CSP_SCRIPT_SRC = ("'self'", OPEN_FORMS_SDK_DOMAIN)
# Allow your webapp to load images from Open Forms SDK.
CSP_IMG_SRC = ("'self'", OPEN_FORMS_SDK_DOMAIN)
# Allow your webapp to load fonts from Open Forms SDK.
CSP_FONT_SRC = ("'self'", OPEN_FORMS_SDK_DOMAIN)
# Allow your webapp to connect to the Open Forms API.
CSP_CONNECT_SRC = ("'self'", OPEN_FORMS_API_DOMAIN)
使页面刷新正常工作
当你开始一个表单时,URL会改变,指示你当前所在的步骤。刷新页面会导致HTTP 404,因为这个URL实际上不存在。你需要捕获这些URL模式,并将用户重定向回表单。你可以这样做
# urls.py
# The view thats starts the form
path("page/<slug:slug>", PageView.as_view(), name="page"),
# Whenever you refresh the page that has the form, the URL might be changed
# and needs to redirect the user to the start of the form.
path("page/<slug:slug>/<path:rest>", PageView.as_view()),
表单显示CSRF错误
这可能有很多原因,因为默认情况下,你通常不希望有跨站请求。然而,这个客户端的整个目的就是允许从你的网站向Open Forms发送跨站请求。
确保你的(非Open Forms)SECURE_REFERER_POLICY Django设置设置为origin-when-cross-origin或更严格。在Django 3.1中,默认情况下这被变得更加严格。
如果设置正确,但你仍然收到这个错误,请查看上述设置,如果你的Open Forms安装配置正确。
表单无法启动
如果你可以看到表单的起始页面,但当你点击“开始”时没有任何反应(或在浏览器日志中看到CSRF错误),你很可能是以管理员用户的身份登录到Open Forms。请从Open Forms登出或使用无痕模式开始表单。
这是一个已知问题。
许可证
版权所有© Maykin Media B.V.,2022
许可协议MIT。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
散列 (django_open_forms_client-0.4.0-py3-none-any.whl)
算法 | 散列摘要 | |
---|---|---|
SHA256 | bc5762c97b316ec48462882358b251478acb94e817f046f0d44265030b638013 |
|
MD5 | b2b22bb853c152b5d35c84f960865192 |
|
BLAKE2b-256 | 6d748cb5b97606907804167422e3890e1967e709785e2539853cc883725208c1 |