Skip to main content

Easily integrate Open Forms in your Django application.

Project description

Open Forms Client (for Django)

Version:

0.1.0

Source:

https://github.com/open-formulieren/open-forms-client-django

Keywords:

Open Forms, Client, Django

PythonVersion:

3.7

Build status Code quality checks black Coverage status

python-versions django-versions pypi-version

About

Easily integrate Open Forms in your Django application. There are 3 main features:

  1. Configuration to connect to Open Forms is added to your Django admin.

  2. By adding an OpenFormsField in any Django model, you get a list of forms in Open Forms to choose from in the Django admin or other Django forms.

  3. You get templatetags to render an Open Forms form in your webpage.

If you have Sentry installed and you enable Sentry in the Django admin configuration page, it will use your existing configuration to connect to Sentry.

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

Installation

Requirements

  • Python 3.7 or newer

  • Django 3.2 or newer

Install

You can install Open Forms Client either via the Python Package Index (PyPI) or from source.

To install using pip:

pip install django-open-forms-client

Usage

To use this with your project you need to follow these steps:

  1. Add open_forms_client to INSTALLED_APPS in your Django project’s settings.py:

    INSTALLED_APPS = (
        # ...,
        "open_forms_client",
    )

    Note that there are no dashes in the module name, only underscores.

  2. Add an OpenFormsField to your relevant models (like a Page model):

    class Page(models.Model):
        # ...
        form = OpenFormsField(blank=True)
  3. Add the templatetags {% openforms_sdk_media %} and {% openforms_form page.form %} to your templates, to render an Open Forms form:

    {% 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. Configure your Open Forms connection and settings in the admin, under Open Forms client configuration. Once the status field shows a green icon, your configuration is working.

  5. Done.

Templatetags

There are 4 templatetags available with several parameters. All parameters translate to Open Forms SDK parameters.

openforms_form(form_id, csp_nonce=None, base_path=None, lang=None, html_id=None)
openforms_sdk_media()
openforms_sdk_js()
openforms_sdk_css()

Gotcha’s

Open Forms configuration

Make sure the domain where you host your webapplication is in the Open Forms ALLOWED_HOSTS setting. Note that this is not the setting in your own webapplication but in the setting in the Open Forms installation.

CPS headers

When your webapplication uses CSP headers you need to pass the csp_nonce to the openforms_form templatetag as well. If you use Django-CSP you can do this:

{% load openforms %}
{% openforms_form page.form csp_nonce=csp_nonce=request.csp_nonce %}

Additionally, you need to allow your webapplication to load styles and scripts from the Open Forms SDK and connect to the Open Forms API. When using Django-CSP some options need to be changed in your settings.py:

# The Open Forms SDK files might differ from the API domain.
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)

Make page refreshes work

The URL changes when you start a form, indicating the step you are currently on. Refreshing the page will result in a HTTP 404 because this URL does not actually exist. You need to catch these URL-patterns and redirect the user back to the form. You can so like this:

# 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.
re_path("^page/(?P<slug>\w+)/", FormRedirectView.as_view()),

Licence

Copyright © Maykin Media B.V., 2022

Licensed under the MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-open-forms-client-0.1.0.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

django_open_forms_client-0.1.0-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file django-open-forms-client-0.1.0.tar.gz.

File metadata

File hashes

Hashes for django-open-forms-client-0.1.0.tar.gz
Algorithm Hash digest
SHA256 abe9adf699fbc959b1703fe4e4f352292275046379a7646284d9b4aaf34b8b89
MD5 51c40213456b7a13be3cc06948788ca8
BLAKE2b-256 ce440c860834c2a3ff9ea7d914290f21b356ad3da803f4a99de7ae2893402cb8

See more details on using hashes here.

File details

Details for the file django_open_forms_client-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_open_forms_client-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5130c126c792ead5939c4d7a8b4a09bdaa8077dbfa0876022dc80b07dce78da7
MD5 05f93424d1ce6351a0a27172c2ad99dd
BLAKE2b-256 7e10f0e04b1a8fa4c1ff0f4701756c25218936330942c62a38c20b69703112eb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page