Comment tester des sous-domaines en local avec django (Linux ou Mac) ?

Created 13 novembre 2022 | Viewed 39 | by Benjamin Edit


Exemples de comment tester localement des sous-domaines avec django (sur Linux ou Mac)

Modifier le fichier hosts

Par défaut pour tester localement une application django, il est possible de faire tourner un serveur

python manage.py runserver

et aller à l'url

localhost:8000

Maintenant, nous souhaitons tester des sous-domaines, par exemple :

www.localhost:8000
fr.localhost:8000
es.localhost:8000
.
.
.

Pour ce faire, ouvrez le fichier hosts situé dans le dossier etc :

vi /etc/hosts

donne par exemple :

  ##
  # Host Database
  #
  # localhost is used to configure the loopback interface
  # when the system is booting.  Do not change this entry.
  ##
  127.0.0.1       localhost
  255.255.255.255 broadcasthost
  ::1             localhost
  # Added by Docker Desktop
  # To allow the same kube context to work on the host and the container:
  127.0.0.1 kubernetes.docker.internal
  # End of section

Pour tester les sous-domaines localement, remplacez simplement la ligne

127.0.0.1       localhost

par

127.0.0.1       www.localhost fr.localhost

maintenant avec

python manage.py runserver

il est possible d'utiliser l'url

www.localhost:8000

ou

fr.localhost:8000

Bonus

Extrayez le nom du sous-domaine dans une vue Django :

            full_url = request.build_absolute_uri()
            dn = full_url.split('/')[2]
            subdomain = dn.split('.')[0]

Mettre en place une redirection de www vers fr ou inversement (What Is a 301 or 302 Redirect? )

            if subdomain == 'www':
                if article.language != 'en':
                    dn_redirect = dn.replace('www',article.language)
                    full_url_redirect = full_url.replace(dn,dn_redirect)
                    response = HttpResponse(status=301)
                    response['Location'] = full_url_redirect
                    return response
            else:
                if article.language == 'en':
                    dn_redirect = dn.replace(subdomain,'www')
                    full_url_redirect = full_url.replace(dn,dn_redirect)
                    response = HttpResponse(status=301)
                    response['Location'] = full_url_redirect
                    return response