Refactoring des URLs #16

Closed
opened 2022-01-07 16:50:05 +01:00 by Fred · 4 comments
Collaborator

Dans le fichier config/urls.py, tu as beaucoup des lignes différentes et tu ne profites pas réellement de la découpe de tes applications.

Tu as par exemple ce bloc:

    # Location management
    path(r"place/", include(ultron.location.urls.place_urlpatterns)),
    path(r"country/", include(ultron.location.urls.country_urlpatterns)),
    path(r"club/", include(ultron.location.urls.club_urlpatterns)),

Et dans le fichier location/urls.py, tu as ceci:

# coding=UTF-8

from django.urls import path

from . import views

place_urlpatterns = [
    path(r"lookup/", views.place_lookup),
    path(r"add/", views.place_create_or_update, name="place_create"),
    path(r"edit/<int:placeid>/", views.place_create_or_update, name="place_update"),
    path(r"<int:placeid>/", views.place_details, name="place_details"),
    path(r"", views.place_listing, name="place_list"),
]

country_urlpatterns = [
    path(r"lookup/", views.country_lookup),
]

club_urlpatterns = [
    path(r"", views.club_listing, name="club_list"),
    path(r"lookup/", views.club_lookup),
]

Ce qui aurait été logique, ç'aurait été de le refactoriser de la manière suivante:

# config/urls.py
path(r"location/", include("ultron.location.urls")),
# location/urls.py

urlpatterns = [
    path("place/lookup", views.place_lookup),
    path("place/add/", views.place_create_or_update, name="place_create"),
    path("place/edit/<int:placeid>/", views.place_create_or_update, name="place_update"),
    path("place/<int:placeid>/", views.place_details, name="place_details"),
    path("place", views.place_listing, name="place_list"),
    path("country/lookup/", views.country_lookup),
    path("club", views.club_listing, name="club_list"),
    path("club/lookup/", views.club_lookup),
]

De cette manière, la configuration de l'appli ne fait que du câblage entre un préfixe d'URL (location) et une application.
C'est l'application elle-même qui décide de ses URLs.

(la propriété urlpatterns est importée automatiquement quand tu fais l'include. En plus, cela permet de dégager tous les imports en haut du fichier config/urls.py).

Note: cela signifie aussi que toutes ces URLs vont se retrouver sous un préfixe "location", mais ce n'est sans doute pas plus mal.

Dans le fichier `config/urls.py`, tu as beaucoup des lignes différentes et tu ne profites pas réellement de la découpe de tes applications. Tu as par exemple ce bloc: ```python # Location management path(r"place/", include(ultron.location.urls.place_urlpatterns)), path(r"country/", include(ultron.location.urls.country_urlpatterns)), path(r"club/", include(ultron.location.urls.club_urlpatterns)), ``` Et dans le fichier `location/urls.py`, tu as ceci: ```python # coding=UTF-8 from django.urls import path from . import views place_urlpatterns = [ path(r"lookup/", views.place_lookup), path(r"add/", views.place_create_or_update, name="place_create"), path(r"edit/<int:placeid>/", views.place_create_or_update, name="place_update"), path(r"<int:placeid>/", views.place_details, name="place_details"), path(r"", views.place_listing, name="place_list"), ] country_urlpatterns = [ path(r"lookup/", views.country_lookup), ] club_urlpatterns = [ path(r"", views.club_listing, name="club_list"), path(r"lookup/", views.club_lookup), ] ``` Ce qui aurait été logique, ç'aurait été de le refactoriser de la manière suivante: ```python # config/urls.py path(r"location/", include("ultron.location.urls")), ``` ```python # location/urls.py urlpatterns = [ path("place/lookup", views.place_lookup), path("place/add/", views.place_create_or_update, name="place_create"), path("place/edit/<int:placeid>/", views.place_create_or_update, name="place_update"), path("place/<int:placeid>/", views.place_details, name="place_details"), path("place", views.place_listing, name="place_list"), path("country/lookup/", views.country_lookup), path("club", views.club_listing, name="club_list"), path("club/lookup/", views.club_lookup), ] ``` De cette manière, la configuration de l'appli ne fait que du câblage entre un préfixe d'URL (`location`) et une application. C'est l'application elle-même qui décide de ses URLs. (la propriété `urlpatterns` est importée automatiquement quand tu fais l'include. En plus, cela permet de dégager tous les imports en haut du fichier `config/urls.py`). Note: cela signifie aussi que toutes ces URLs vont se retrouver sous un préfixe "location", mais ce n'est sans doute pas plus mal.
Sulley was assigned by Fred 2022-01-07 16:50:05 +01:00
Author
Collaborator

...

sauf que tu as hardcodé certaines URLs dans tes fichiers JS:

        $('#id_place_related').autocomplete({
            source: function(request, response) {
                $.ajax({
                    url: '/place/lookup/?pattern=' + $('#id_place_related').val(),
                    dataType: "json",
                    success: function(data) {

(cf. templates/planning/events/create.html)

... sauf que tu as hardcodé certaines URLs dans tes fichiers JS: ```js $('#id_place_related').autocomplete({ source: function(request, response) { $.ajax({ url: '/place/lookup/?pattern=' + $('#id_place_related').val(), dataType: "json", success: function(data) { ``` (cf. templates/planning/events/create.html)
Owner

Donc :

  1. ne plus hardcoder les URL dans le jquery
  2. changer ma gestion d'URL

Mais j'aimais bien le fait de séparer les urlpatterns par classes plutôt que par application.

Donc : 1. ne plus hardcoder les URL dans le jquery 2. changer ma gestion d'URL Mais j'aimais bien le fait de séparer les urlpatterns par classes plutôt que par application.
Author
Collaborator

Mais j'aimais bien le fait de séparer les urlpatterns par classes plutôt que par application.

Elles restent séparées par classes, mais elles le sont également par application.

/
|-- locations/
|   |--- places/
|   |--- clubs/
|   |--- ...
|-- gymnastes/
|-- planning/
|   |-- events/
|   | ...
...

> Mais j'aimais bien le fait de séparer les urlpatterns par classes plutôt que par application. Elles restent séparées par classes, mais elles le sont également par application. ``` / |-- locations/ | |--- places/ | |--- clubs/ | |--- ... |-- gymnastes/ |-- planning/ | |-- events/ | | ... ... ```
Owner

Voila c'est fait ! J'ai beaucoup (totalement) modifié les URLs et j'ai même ajouté des tests.

Voila c'est fait ! J'ai beaucoup (totalement) modifié les URLs et j'ai même ajouté des tests.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: Sulley/Ultron#16
No description provided.