django - bonnes pratiques - Python - Programmation
Marsh Posté le 16-08-2016 à 11:20:22
j'ai du faire un post trop gros
Bon j'ai approfondi ma lecture du framework django, et finalement, je pense qu'il est mieux que j'utilise le mécanisme de session et d'authentification ( et autorisation ) de django. Il est bien fait, et customisable. Je ne voulais pas utiliser la table user de django car il manquait des champs pour moi, mais j'ai trouvé dans la doc comment rajouter des champs :
https://docs.djangoproject.com/en/d [...] ll-example
https://docs.djangoproject.com/en/d [...] bout-users
suite à ce post sur stackoverflow http://stackoverflow.com/questions [...] -in-django qui donne également une méthode pour le faire "à la main" ( avec un onetoonefield )
Le seul problème que j'aurai est que c'est basé sur des cookies , et que je ne vais pas utiliser un navigateur pour accéder à mes données, mais à une application mobile en Qt/Qml. Heureusement, il semble y avoir une gestion des cookies avec le QNetworkManager, il faut que je prototype un exemple pour voir si ca fonctionne comme avec un navigateur.
il me reste à voir l'upload d'image ( pas comment faire, mais la bonne pratique ) et j'aurai fait le tour des sujets
Marsh Posté le 08-08-2016 à 20:57:05
Salut
Suite aux conseils d'un forumeur sur le topic android, j'ai choisi d'utiliser django afin d'avoir un middleware efficace pour accéder aux données de ma base ( appli mobile pour gérer une association de jeux de société ). J'ai déjà écrit quelques bouts de code afin de me familiariser au python mais aussi à django. Seulement, après avoir lu la doc de django qui est très bien faite, il y a quelques concepts que je n'ai pas bien compris : propres à django, mais aussi de façon plus générale au développement d'appli web ( mais difficile de faire plusieurs sujets ).
Avant tout, notez que je débute en programmation web, je vais peut être dire des âneries J'essaie simplement de me rapprocher le plus des bonnes pratiques, et je n'arrive pas à trouver tout ce que je veux sur le web pour le moment.
- authentification / session :
Django offre un mécanisme d'authentification / session, mais j'ai l'impression qu'il est plus approprié pour une appli web et que ce n'est pas forcément utile pour une application à part entière ( le client est écrit en Qt/qml ). Je ne vois pas bien comment m'en servir, et de plus, il utilise son propre panel d'utilisateurs. Or, je veux gérer mes propres utilisateurs de mon coté , et je ne vois pas comment faire le lien entre ma table d'utilisateurs ( avec un login/pass ) et le système d'authentification de django.
Du coup, j'ai pensé à mon propre système d'authentification, mais peut être est-ce trop naif, ou bien similaire à ce que propose django, auquel cas je pourrais utiliser ce que propose le framework. Voici la description :
- 1 url pour login / pass, qui renvoie un identifiant de session unique stocké dans une table session ( id_user , session_id , timeout ).
- on doit passer le session_id sur toutes les autres urls ( sinon renvoie http 403 ) et dans le code coté python, je teste si le session_id existe et n'est pas expiré et je rattache l'url à l'utilisateur associé. Chacune des requêtes si elle réussit , remet à 0 le timeout.
Je n'ai pas besoin d'un système ultra secure, j'ai l'impression que ceci peut me suffire. Si je veux rajouter un peu de sécurité, j'encapsule ça dans du https ( pas encore décidé d'où proviendrait le certificat ).
- accès à la base ( RW ) :
En lecture, j'ai bien compris le système d'urls , c'est très puissant et bien fait
En écriture ( pour ajouter de nouveaux enregistrements, en supprimer, ou bien en modifier ) ,j'ai un peu plus de mal. Enfin j'ai réussi à faire un exemple à base de requête POST + form , mais je ne sais pas si c'est ce qu'il y a de mieux à faire. Je me voyais plutot envoyer des données json plutot qu'un formulaire. Qu'y a-t-il de mieux ?
- Envoi et stockage de fichiers ( images dans un premier temps ) :
J'ai 2 solutions, stocker les images dans la base en tant que BLOB , ou bien stocker les images à part. Je ne sais pas quelle est la meilleure pratique ? je vois cependant souvent que les images ne sont pas dans la base, et sont stockées directement dans l'arborescence du site web et on y accède par des http GET.
L'avantage du BLOB c'est que je pourrais controler l'accès aux images via le session_id, alors que des http GET sur l'arborescence, ca ne passerait pas par django mais directement par le serveur web qui gère tout ca ( apache chez moi ).
L'inconvénient est que c'est peut être lourd de stocker des images ( 100ko à 1Mo max ) dans une base ? non ?
Ensuite l'upload. Dans le cas du stockage dans la base, je vois à peu près comment faire. Mais dans l'arborescence, je ne sais pas quel serait le bon endroit ? J'ai vu un exemple sur le site django, qui envoie l'image via un formulaire ( ce qui implique que je vais être obligé d'utiliser les formulaires pour la question précédente) , et qui sauvegarde le fichier ( for chunk in chunks ... write ... ) directement dans un path. Quel serait le path ? Si j'exporte /var/www avec apache, je sauvegarde dans un sous répertoire de ce répertoire tout simplement ? Est-ce une bonne pratique ?
Pour info, je teste django sous windows pour le moment , avec le serveur web de dev django ( manage.py runserver ), mais je suis en train d'installer une vm linux et rattacher django à apache via wsgi, en espérant que ce n'est pas trop complexe et lorsque tout ceci marchera, je l'exposerai sur le net sur un serveur dédié ( que je configurerai moi même, j'ai essayé du simple hosting, ce n'est pas assez souple )
Merci d'avance pour l'aide que vous pourrez m'apporter