Code Monkey home page Code Monkey logo

pulpo-forms-django's Introduction

pulpo-forms-django

Pulpo Forms is a Django app capable of creating powerful surveys with many different field types, multi path logic for fields and pages and statistical analysis of responses.

Requirements

  • Django >= 1.6
  • Django Rest Framework >= 3.1.1
  • AngularJS 1.3.9

Features

Pulpo Forms provides several useful functionalities and characteristics for survey creation.

  • Support for multi page surveys with different field types.
  • Multi path logic for both fields and pages
  • Survey version control
  • Friendly field configuration interface
  • Configurable tooltips for fields
  • Configurable actions to run after submit
  • Survey preview with responsive template
  • Custom validations for the different field types.
  • Statistical data from the responses to the surveys.
  • Export of responses as CSV.
  • Export of statistics in PDF format.
  • AngularJS module with tools to embed the forms in web pages.

Demo

http://demo.pulpoforms.octobot.io/pulpo/

User: pulpo Password: pulpo123

Getting Started

Installation

Install Pulpo Forms with the Python package manager:

	pip install pulpo-forms

Settings

  • Add 'pulpo_forms' to the INSTALLED_APPS of your project's settings:
    INSTALLED_APPS = (
      # other apps
      'pulpo_forms',
    )
  • Add the FIELD_FILES to your project's settings to include the provided fields, plus any other field defined in another app:
  FIELD_FILES = (
    'pulpo_forms.fieldtypes.TextField',
    'pulpo_forms.fieldtypes.TextAreaField',
    'pulpo_forms.fieldtypes.EmailField',
    'pulpo_forms.fieldtypes.CheckboxField',
    'pulpo_forms.fieldtypes.SelectField',
    'pulpo_forms.fieldtypes.GeoField',
    'pulpo_forms.fieldtypes.NumberField',
    'pulpo_forms.fieldtypes.CIField',
    'pulpo_forms.fieldtypes.FileField',
    'other_app.fields',
)
  • Add 'pulpo_forms.middlets.ValidationErrorToHttpErrorMiddleware' to the MIDDLEWARE_CLASSES of your project's settings:
    MIDDLEWARE_CLASSES = (
      # other
      'pulpo_forms.middlets.ValidationErrorToHttpErrorMiddleware',
    )
  • Define the base url you want and add it to your project's settings:
    FORMS_BASE_URL = '<base_url>'
  • To configure the mail service the following variables must be defined in your settings file as well:
    EMAIL_HOST = <'MAIL_SERVER'>
    EMAIL_HOST_USER = <'MAIL_ACCOUNT'>
    EMAIL_HOST_PASSWORD = <'MAIL_PASSWORD'>
    EMAIL_PORT = <PORT>
    EMAIL_USE_TLS = True
  • Finally, in your project's urls.py add:
    # other imports
    import pulpo_forms

    urlpatterns = patterns('',
        # other patterns
        url(r'^<base_url>/', include('pulpo_forms.urls'), name='base'),
    )

Model field

Pulpo Forms supports adding the items of models of other applications as combobox options. This is called ModelField. For this to work it is necessary to define a new field type. that extends the abstract class ModelField and which sets the model attribute to the model class whose items shall be shown.

Note:

It is not yet supported to filter these items. It should also have a JavaScript constructor class but just needs to redefine the properties.html template to show the correct name.

Rendering forms

To render the forms you should use the Pulpo Forms Angular directive

Fields

Field components

Each of the field types that belong to this framework has the following components:

Python class

Each field type must have a Python class. This class must extend the abstract class Field (implemented in pulpo_forms.fieldtypes.Field.py) or one of its subclasses. This class will contain all the methods associated to this field type like validations, statistics operations, etc. It will also contain the paths to the HTML templates and JavaScript/CSS files associated with this field type.

JavaScript files

Each field type might need up to 3 JavaScript files:

  • JSON constructor

    Located in the folder static/js/fields. This file must be provided and must contain a class that extends FieldBase, which contains the fields attributes.

  • Operator

    Located in static/js/operators. This file is needed only if this field type includes operators for the multipath logic. Contains a class that extends OperatorField. All the methods defined in this class will be listed as available operators.

  • Validator

    Located in static/js/validators. This file is necessary only if this field needs extra validation in the Front-End.

HTML Templates

Each field type must have defined 2 templates which will normally live under templates/fields/<fieldtype_name>/, there is an extra template for fields that have statistics analysis.

  • properties.html

    Generates the validation options for this field type in the editor’s panel. Extends field_properties_base.html

  • template_edit.html

    Contains the HTML code for this field to be shown in the editor page. Extends field_edit_template_base.html.

  • template_statistic.html

    Contains the HTML code for this field to be shown in the statistics page.

Factory

To load all the defined field types dynamically the app uses factories in Front- and Back-End.

This means that for a new field type to be supported, it has to be registered in these factories. Additionally it has to be registered using the same identifying name in both and without using one of the previously used identifiers. Conventionally the identifier will be the same as the class name (e.g. NumberField).

Creating a new field type

To define a new field type you need to create the necessary components detailed in Field Components, and add a line to the settings of your project:

    FIELD_FILES=(
        #other fields,
        <path_to_your_python_class>
    )

Known issues

  • Multipath logic has very few consistency checks so the user that generates the surveys will be responsible for creating a consistent logic.

pulpo-forms-django's People

Contributors

gpsteglich avatar veronicamartinez avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.