66 votes

Comment utiliser Django pour obtenir le nom du serveur hôte ?

Comment utiliser Django pour obtenir le nom du serveur hôte ?

J'ai besoin du nom du serveur d'hébergement au lieu du nom du client ?

4 votes

Je ne peux pas croire que ce processus soit si alambiqué à Dj.

106voto

Craig Trader Points 8924

Je mets généralement quelque chose comme ceci dans settings.py :

import socket

try:
    HOSTNAME = socket.gethostname()
except:
    HOSTNAME = 'localhost'

26 votes

Votre solution ne fonctionne pas si vous utilisez Docker. Elle affichera l'ID du conteneur au lieu de l'URL.

53 votes

Sa solution a été écrite avant que docker n'existe. Désolé.

6 votes

@antony.trupe vient des mèmes ?

84voto

Tobu Points 10101

Si vous avez une requête (par exemple, ceci est à l'intérieur d'une vue), vous pouvez consulter request.get_host() ce qui permet d'obtenir un nom de localité complet (hôte et port), en tenant compte, le cas échéant, des en-têtes de proxy inverse. Si vous n'avez pas de requête, vous devez configurer le nom d'hôte quelque part dans vos paramètres. Le simple fait de regarder le nom d'hôte du système peut être ambigu dans de nombreux cas, les hôtes virtuels étant les plus courants.

8voto

azalea Points 137

Il suffit d'ajouter à Réponse de @Tobu . Si vous avez un objet de requête et que vous souhaitez connaître le protocole (c'est-à-dire http / https), vous pouvez utiliser demande.schéma (comme suggéré par Commentaire de @RyneEverett ).

Vous pouvez également faire (réponse originale ci-dessous) :

if request.is_secure():
    protocol = 'https'
else:
    protocol = 'http'

Parce que is_secure() retours True si la demande a été faite avec HTTPS.

6voto

Ankit Jaiswal Points 6128

Essayer os.environ.get('HOSTNAME')

0 votes

Lorsque vous utilisez cette fonction, sachez que certaines distributions ne définissent que HOST, tandis que d'autres ne définissent que HOSTNAME, et que beaucoup de l'exportation ni par défaut.

4voto

SofienM Points 194

Si vous avez besoin d'obtenir http(s)://hostname/ vous pouvez utiliser les éléments suivants :

request.build_absolute_uri('/')

Toutes les méthodes utiles sont répertoriées aquí

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X