Accueil / Blog / Métier / 2013 / Signez vos documents sur tablette tactile avec django-jsignature

Signez vos documents sur tablette tactile avec django-jsignature

Par Florent Lebreton publié 26/11/2013
Limiter les échanges et les impressions de courrier en signant "à la main" des documents directement sur tablette tactile avec jSignature et django-jsignature.
Signez vos documents sur tablette tactile avec django-jsignature

Aujourd'hui, tous les documents (ou presque) générés par l'activité d'une entreprise sont créés informatiquement. Dans certains cas, l'impression d'un document est nécessaire uniquement pour apposer une signature (de l'envoyeur, du destinataire ou autre).

Dans le cadre d'un projet de GMAO (Gestion de la Maintenance Assistée par Ordinateur) "full web" chez Makina Corpus, nous avons mis en place, pour les techniciens itinérants, la saisie/génération d'un rapport d'intervention :

  • Dès la fin de son intervention, le technicien saisit son compte-rendu sur tablette tactile.
  • Un rapport PDF est généré et affiché sur la tablette.
  • Le client contrôle et signe le rapport, toujours, sur la tablette.
  • Le rapport signé est envoyé aux deux parties.

Cette procédure, réalisée sur place et immédiatement après l'intervention, permet un gain de temps important en évitant les doubles saisies, les impressions et les échanges mails et courriers.

Ce qui nous intéresse ici est la partie "signature" que nous avons réalisé avec la librairie jSignature, encapsulée dans une petite bibliothèque django.

les-technologies-utilisees-dans-notre-gmao-job-django-jsignature.png

 

Une rapide note sur ce que dit la loi

En premier lieu, il faut différencier la "signature manuscrite-électronique", qui consiste à capturer électroniquement une signature manuscrite, de la "signature électronique" (ou "signature numérique") qui consiste à associer une clé cryptée à la donnée.

A l'heure actuelle, les règles juridiques concernant la signature "manuscrite-électronique" sont assez floues. Pour qu'une signature soit considérée comme fiable, il faudrait pouvoir :

  • capturer le tracé, le temps d'exécution et la pression du stylet, permettant à un graphologue d'authentifier la signature (possible seulement sur les outils de capture spécialisés);
  • garantir la sécurisation / non modification de l'information.

Les signatures que nous capturons sur PC / tablette / smartphone n'ont pas de réelle valeur juridique, ce qui n'empêche pas qu'elles peuvent être utiles dans certains cas.

 

jSignature et django-jsignature

jSignature est un plugin jQuery qui transforme un simple <div> en cadre prêt à recevoir une signature dessinée à la souris ou mieux, au doigt ou stylet sur écran tactile. Quelques options de configuration sont disponibles et l'export de la signature est possible dans différents formats (image base/64, image base/30, JSON...).

Nous avons publié django-jsignature, une petite app django permettant :

  • d'avoir facilement un champ "signature" dans un formulaire django (avec un field et un widget) ;
  • de faire le rendu de l'image en Python (avec Pillow) ;
  • de stocker la signature (en JSON) et la date de signature dans un modèle (champs fournis par un mixin).

 

Signez ici SVP !

Pour utiliser l'app, il suffit :

  • de l'installer ...
    $ pip install -e git+https://github.com/fle/django-jsignature.git#egg=django-jsignature
  • de l'ajouter au INSTALLED_APPS dans vos settings django ...
    # settings.py
    INSTALLED_APPS = (
    ...
    'jsignature',
    )
  • d'utiliser le field (et son widget) fourni dans un formulaire ...
    # forms.py
    from django import forms
    from jsignature.forms import JSignatureField

    class SignatureForm(forms.Form):
        signature = JSignatureField()
  • de faire le rendu de l'image après validation du formulaire ...
    # views.py
    from jsignature.utils import draw_signature
    from myapp.forms import SignatureForm

    def my_view(request):
        form = SignatureForm(request.POST or None)
        if form.is_valid():
            signature = form.cleaned_data.get('signature')
            if signature:
                # sous forme d'image
                signature_picture = draw_signature(signature)
                # sous forme de fichier
                signature_file_path = draw_signature(signature, as_file=True)
  • et de faire ce que vous voulez de l'image (l'afficher, l'apposer dans un PDF...).

Si vous souhaitez stocker les signatures, vous pouvez faire hériter votre model de JSignatureFieldsMixin, qui fourni deux champs signature et signature_date :

    # models.py
from django.db import models
    from jsignature.mixins import JSignatureFieldsMixin

    class SignatureModel(JSignatureFieldsMixin):
        name = models.CharField()

 

Personnalisation

Les options de configuration de jSignature sont disponibles niveau Python. Vous pouvez surcharger ces options de deux manières :

  • Globalement, dans vos settings :
    # settings.py
    JSIGNATURE_WIDTH = 500
    JSIGNATURE_HEIGHT = 200
  • Spécifiquement, dans un formulaire :
    # forms.py
    from jsignature.forms import JSignatureField
    from jsignature.widgets import JSignatureWidget

    JSignatureField(widget=JSignatureWidget(jsignature_attrs={'color': '#CCC'}))

 

Conclusion

Même si la signature électronique n'est pas une preuve totalement valable aux yeux de la loi, pouvoir apposer une signature sur une tablette tactile peut être vraiment utile et éviter des impressions et des échanges inutiles :).

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Formation Django initiation à Toulouse du 13 au 15 mars Formation Django initiation à Toulouse du 13 au 15 mars 26/01/2017

Entrez de plain-pied dans l'univers de Django aux côtés de développeurs ayant une expérience de ...

Retour sur la PyConFr 2016 Retour sur la PyConFr 2016 18/10/2016

Nous étions présents à Rennes pour PyConFr 2016. Voici notre compte-rendu à chaud.

Wagtail: How to use the Page model and its manager (part 2) Wagtail: How to use the Page model and its manager (part 2) 08/08/2016

The Page model has several methods specific to Wagtail. This is also the case of its manager. We ...

Wagtail : How to make your own content type models (part 1) Wagtail : How to make your own content type models (part 1) 29/07/2016

We are used to initialize our CMS directly from a web interface, often including lots of complex ...

Presentation of the latest Django CMS: Wagtail Presentation of the latest Django CMS: Wagtail 22/07/2016

Wagtail is a quite recent Django CMS. However, its young age does not keep it from having a lot of ...