跳转到主要内容

轻松将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

Build status Code quality checks black Coverage status

python-versions django-versions pypi-version

关于

轻松将Open Forms集成到您的Django应用程序中。主要有3个主要功能

  1. 在Django管理中添加了连接到Open Forms的配置。

  2. 在任意的Django模型中添加一个OpenFormsField,您就可以在Django管理或其他Django表单中选择Open Forms中的表单列表。

  3. 您可以得到templatetags来在网页中渲染Open Forms表单。

如果您已安装Sentry并启用了Django管理配置页面上的Sentry,它将使用您现有的配置连接到Sentry。

Ordered dashboard with dropdown menu. Ordered dashboard with dropdown menu. Ordered dashboard with dropdown menu.

安装

要求

  • Python 3.7或更高版本

  • Django 3.2或更高版本

安装

您可以通过Python包索引(PyPI)或从源安装Open Forms Client。

使用pip安装

pip install django-open-forms-client

用法

要使用此项目,您需要遵循以下步骤

  1. open_forms_client添加到Django项目的settings.py文件中的INSTALLED_APPS

    INSTALLED_APPS = (
        # ...,
        "openformsclient",
    )
  2. 将一个OpenFormsField添加到你的相关模型中(例如一个Page模型)。

    from openformsclient.models import OpenFormsField
    
    class Page(models.Model):
        # ...
        form = OpenFormsSlugField(blank=True)

    还有一个OpenFormsUUIDField,它存储表单的UUID而不是“slug”。这更精确,但如果有人在Open Forms中替换了表单,UUID将改变,但slug可能保持不变。

  3. 将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>
  4. 在管理员界面下,在Open Forms客户端配置中配置你的Open Forms连接和设置。一旦状态字段显示绿色图标,配置就正常工作了。

  5. 完成。

Templatetags

有4个templatetags可用,具有多个参数。所有参数都翻译为Open Forms SDK参数。

{% load openforms %}
{% openforms_form form_id csp_nonce base_path lang html_id %}
{% openforms_sdk_media %}
{% openforms_sdk_js %}
{% openforms_sdk_css %}

注意事项

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.tar.gz (14.9 kB 查看散列)

上传时间

构建分发

django_open_forms_client-0.4.0-py3-none-any.whl (14.6 kB 查看散列)

上传时间 Python 3

由以下支持