Esiste un modo per scoprire quale porta è in ascolto su un'istanza Django all'interno del codice?Scopri in quale istanza di porta Django è in esecuzione?
risposta
È possibile ottenere le informazioni tramite HttpRequest. Scopri i documenti Django here.
È possibile accedere a questo tramite l'attributo META che è un dizionario contenente le informazioni dell'intestazione HTTP.
Esempio:
def someView(request):
#Try printing to screen
print request.META['SERVER_PORT']
...
return(response)
'SERVER_PORT' esiste in modo affidabile, o c'è il pericolo che a volte sia assente? – exupero
bene, per quanto posso dire che funzionerà bene su un server di sviluppo. Non ho provato a usarlo in esecuzione con Apache. Vorrei scrivere un po 'di codice di test per ricontrollare. Altrimenti, non sono sicuro di come altro potresti scoprire senza passare attraverso l'oggetto richiesta. –
Cosa succede se non sei in una vista? – johnboiles
forse request.META['SERVER_PORT']
o non sei in una vista?
C'è una soluzione quando non sono in una vista? – utapyngo
ho trovato questo potrebbe essere utile se avete bisogno di conoscere il numero di porta o l'indirizzo IP fuori dalla vista
import sys
import socket
logger.error(socket.gethostbyname(socket.gethostname())+"----"+sys.argv[-1])
(in models.py per esempio.) Questo ti darà un'emissione come di seguito:
192.168.1.222----0.0.0.0:8000
@utapyngo Questa è la soluzione quando non si è in una vista. –
All'interno del codice Django o da un processo esterno (ad es. Riga di comando)? – ivy
All'interno del codice Django. – exupero