Get URL endpoints from another field than the id

Django REST API 2I wanted update data from a tool (tool A), after users updates from another tool (tool B). The perfect field of action for Django REST framework I guess. So I built my own API with Django 3.

But I faced a problem: the relationship between the data had to be on the email field. And by default Django REST framework uses ids to create URL endpoints of each record. Indeed it seems to be this kind of URLs which allow updates by record (PUT command with httpie for example).

These are the ones I need to include in the code that will run in the forms of tool B!

Example of httpie command to update fields through a REST API

> http -a UserLogin:PassWord PUT http://127.0.0.1:8000/users/4/ firstname="Gretha" lastname="Thunberg"
The URL contained above is the endpoint of a record, using its id (4) from tool A. But tool B does not know this id, and does not have to know it. He just want to update firstname and lastname according an email relationship. Kwarghhh!

Exemple d'interface cartographiqueFabrik est une (excellente) extension gratuite et open-source disponible sur Joomla, et permettant de construire des applications de bases de données. Un article présentant globalement le CCK Fabrik est déjà disponible sur ce site.

L'article ci-dessous est plus détaillé, et regroupe une série de pratiques courantes ou avancées, mais peu documentées en français. L'article reprend aussi des fonctionnalités PHP classiques mais ici adaptées à l'API Joomla.

Bien sûr cette page n'a rien d'exhaustif, et ne pourrait exister sans le forum Fabrik. Merci encore à toute l'équipe Fabrik et au projet Joomla. Et non, je ne travaille pas pour eux.

Liste de commandes non-exhaustive bien sûr, et surtout propre à mon usage personnel (sous Windows). Ce mémo est lié à l'article À la découverte de Django et GeoDjango.

Créer un projet Django (un site)

Sous Windows :

python -m django startproject mon_projet

Sous Linux :

django-admin startproject mon_projet

Sous Linux mais avec des versions anciennes, parfois :

django-admin.py startproject mon_projet

Créer une app Django (une fonctionnalité du site)

Placez-vous dans votre projet, changez le nom d'app souhaité, puis :

python manage.py startapp mon_appli

À chaque fois qu'il faut se placer dans le répertoire de votre projet Django, c'est pour utiliser le fichier manage.py, qui permet d'appeler Python directement à partir de votre projet personnel, pourtant situé hors de l'environnement virtuel.

Liste de commandes non-exhaustive bien sûr... Mémo surtout propre à mon usage personnel sur MySQL et Postgres, attention dans vos manipulations.

De nombreuses commandes SQL sont valables sur les 2 systèmes, testez, lisez les messages d'erreur renvoyés et n'hésitez pas à faire des recherches textuelles sur l'intégralité de l'article.


Postgres/PostGIS

Connaître l'encodage d'un serveur Postgres

SHOW SERVER_ENCODING

Connaître l'encodage du client Postgres

SHOW CLIENT_ENCODING

Connaître le SRID des géométries

select distinct st_srid(geom) from TABLE

Calculer une surface en km2 en arrondissant  à l'entier

select round(area(GEOM)/1000000) as area from TABLE

Accès SSH en ligne :

https://ssh-hinot.alwaysdata.net/

Activer l'environnement virtuel

Après création d'un projet Django via l'administration Alwaysdata, un environnement virtuel est créé à la racine du projet, nommé env pour moi.

Pour l'activer, une fois dans votre projet (cd votre_projet).

source env/bin/activate

Fichiers statiques

Si vos fichiers statiques sont par exemple dans un répertoire nommé static à la racine de votre projet, ajoutez dans votre site Alwaysdata de type Python WSGI (dans l'administration Alwaysdata), dans l'option Static paths :

/static=static

Les expressions régulières (regex) sur Notepad++ sont très pratiques pour standardiser un fichier de données avant import par exemple, récupérer des données, corriger des chaînes particulières, avec des conditions, etc...

Ici quelques astuces propres à mon usage personnel.