Makina Blog
Signez vos documents sur tablette tactile avec django-jsignature
Limiter les échanges et les impressions de courrier en signant "à la main" des documents directement sur tablette tactile avec jSignature et 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.
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 :).
- Le code est disponible ici : https://github.com/fle/django-jsignature.git
- Découvrez nos formations Django, de l'initiation à l'avancé
Formations associées
Formations Django
Formation Django avancé
À distance (FOAD) Du 9 au 13 décembre 2024
Voir la formationActualités en lien
Utiliser des fonctions PostgreSQL dans des contraintes Django
Cet article vous présente comment utiliser les fonctions et les check constraints
PostgreSQL en tant que contrainte sur vos modèles Django.
Comment migrer vers une version récente de Django ?
Que ce soit pour avoir les dernières fonctionnalités ou les correctifs de sécurité, rester sur une version récente de Django est important pour la pérennité de son projet.
Le projet Agrégateur : fusionner des bases de données Geotrek
Le partage et la diffusion des données font partie des problématiques historiques au cœur du projet Geotrek.