django change le port de runserver par défaut

130

Je voudrais rendre le port par défaut qui manage.py runserverécoute sur spécifiable dans un étranger config.ini. Existe-t-il une solution plus facile que d'analyser l' sys.argvintérieur manage.pyet d'insérer le port configuré?

L'objectif est de s'exécuter ./manage.py runserversans avoir à spécifier l'adresse et le port à chaque fois, mais en lui faisant prendre les arguments du config.ini.

jonny
la source
Si vous exécutez la commande à partir de votre historique de ligne de commande, il y a encore moins de frappes. Par exemple, pour moi, c'est "<ctrl-r> exécute <enter>", et il exécute automatiquement la même commande que la dernière fois, donc le port, etc. est inclus.
Jonathan Hartley

Réponses:

176

créez un script bash avec les éléments suivants:

#!/bin/bash
exec ./manage.py runserver 0.0.0.0:<your_port>

enregistrez-le en tant que runserver dans le même répertoire que manage.py

chmod +x runserver

et exécutez-le comme

./runserver
Pablo Albornoz
la source
Soit cela, soit je pense à ajouter une commande de gestion personnalisée.
jonny
Vous ne pouvez pas exécuter le serveur de développement par programme, donc une commande personnalisée ne fonctionnera que si elle appelle le shell en utilisant quelque chose comme call. Si cette solution fonctionne pour vous, assurez-vous de la marquer comme résolue.
Pablo Albornoz
J'ai en fait commencé à utiliser supervisorpour cela maintenant, ce qui le rend encore plus facile à gérer. :-) Mais la vôtre est probablement la solution la plus propre autre que l'écriture d'un runserverscript dédié .
jonny
Supervisor est une bonne solution car je ne le recommanderais pas pour exécuter l'environnement de développement. Vous perdez l'avantage d'avoir la sortie du serveur sur le terminal, entre autres. Si vous voulez vraiment utiliser Supervisor, je vous conseille de l'utiliser avec un serveur WSGI complet comme Gunicorn. Veuillez ne pas exécuter le serveur de développement en tant que serveur de production ...
Pablo Albornoz
C'est utile mais pas génial lorsque vous jonglez avec plusieurs projets à la fois - j'aurais accepté la réponse ci-dessous qui spécifie le port à utiliser pour chaque projet distinct. Juste mon avis tho.
105

En fait, le moyen le plus simple de changer (uniquement) le port dans le serveur de développement Django est comme:

python manage.py runserver 7000

qui devrait exécuter le serveur de développement sur http://127.0.0.1:7000/

Qback
la source
2
Cette réponse concerne le changement de port, pas le changement du port par défaut.
physicalattraction
42

Depuis Django 1.9, la solution la plus simple que j'ai trouvée (basée sur la solution de Quentin Stafford-Fraser) est d'ajouter quelques lignes manage.pyauxquelles modifier dynamiquement le numéro de port par défaut avant d'appeler la runservercommande:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")

    import django
    django.setup()

    # Override default port for `runserver` command
    from django.core.management.commands.runserver import Command as runserver
    runserver.default_port = "8080"

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
BillyBBone
la source
Bien que cela ne réponde pas exactement à la question d'origine et que l'indentation soit foirée (le code doit être indenté de «import django» vers le bas), je préfère cette réponse car elle est entièrement autonome et ne nécessite pas de changer ce qui est entré sur la ligne de commande.
PurpleDiane
1
@PurpleDiane L'indentation est corrigée.
Flimm
Mon manage.py ne ressemble pas vraiment à ça, je suppose que Django a changé depuis
NaturalBornCamper
6
Actuellement (à partir de 2.0.3), vous pouvez simplement ajouter: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080à votre manage.py. Vous pouvez également modifier l'adresse d'écoute avec:runserver.default_addr
Vargas
30

Toutes les commandes suivantes sont possibles pour changer le port lors de l'exécution de django:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000
Krishnamoorthy Acharya
la source
1
"Le but est d'exécuter ./manage.py runserver sans avoir à spécifier l'adresse et le port à chaque fois"
JuSTMOnIcAjUSTmONiCAJusTMoNICa
11

Créez une sous-classe django.core.management.commands.runserver.Commandet écrasez le default_portmembre. Enregistrez le fichier en tant que commande de gestion de votre choix, par exemple sous <app-name>/management/commands/runserver.py:

from django.conf import settings
from django.core.management.commands import runserver

class Command(runserver.Command):
    default_port = settings.RUNSERVER_PORT

Je charge les paramètres du formulaire de port par défaut ici (qui à son tour lit d'autres fichiers de configuration), mais vous pouvez tout aussi bien le lire directement à partir d'un autre fichier.

Feuermurmel
la source
Cela semble être la meilleure solution, cependant, mon Django 1.8.14 ne reconnaît pas mon fichier auto-créé runserver.py. Dois-je l'enregistrer quelque part?
physicalattraction
@physicalattraction Votre fichier n'est probablement pas au bon endroit. docs.djangoproject.com/en/2.0/howto/custom-management-commands commence par une description de l'endroit où placer le module python pour la runservercommande. Peut-être avez-vous également une autre application enregistrant également une commande nommée runserver. Essayez de renommer votre commande et voyez si elle est reconnue.
Feuermurmel
1
Je l'ai mis <app_name>/management/commands/runserver.py, mais l'original de Django runserverest utilisé. Quand je le renomme run_server.py, il est reconnu. Je ne vois rien de spécial runserversur la page vers laquelle vous créez un lien.
physicalattraction
La chose est de staticfilesfaire exactement ce que vous suggérez . Donc, suivre vos instructions interrompt la diffusion des fichiers statiques en développement. Il est préférable d'importer depuis django.contrib.staticfiles.management.commands.
x-yuri
8

Nous avons créé une nouvelle commande de gestion «runserver» qui est un wrapper fin autour de la commande standard mais qui change le port par défaut. En gros, vous créez management/commands/runserver.pyet insérez quelque chose comme ceci:

# Override the value of the constant coded into django...
import django.core.management.commands.runserver as runserver
runserver.DEFAULT_PORT="8001"

# ...print out a warning...
# (This gets output twice because runserver fires up two threads (one for autoreload).
#  We're living with it for now :-)
import os
dir_path = os.path.splitext(os.path.relpath(__file__))[0]
python_path = dir_path.replace(os.sep, ".")
print "Using %s with default port %s" % (python_path, runserver.DEFAULT_PORT)

# ...and then just import its standard Command class.
# Then manage.py runserver behaves normally in all other regards.
from django.core.management.commands.runserver import Command
Quentin Stafford-Fraser
la source
2

Dans Pycharm, vous pouvez simplement ajouter le port aux paramètres

entrez la description de l'image ici

chaggy
la source
1

Je suis très en retard à la fête ici, mais si vous utilisez un IDE comme PyCharm, il y a une option dans «Modifier les configurations» sous le menu «Exécuter» (Exécuter> Modifier les configurations) où vous pouvez spécifier un port par défaut. Ceci n'est bien sûr pertinent que si vous déboguez / testez via PyCharm.

Smitty
la source
1

Si vous souhaitez modifier les configurations par défaut, procédez comme suit:

  1. Commande de type de terminal ouvert

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Maintenant, ouvrez le fichier runserver.py dans l'éditeur nano en tant que superutilisateur

     $ sudo nano runserver.py
  3. recherchez la variable 'default_port', vous verrez alors le numéro de port par défaut est '8000'. Maintenant, vous pouvez le changer en ce que vous voulez.

  4. Maintenant, quittez et enregistrez le fichier en utilisant "CTRL + X et Y pour enregistrer le fichier"

Remarque: remplacez <2/3> .x par votre version utilisable de python

rhoitjadhav
la source
0
  1. Créez une variable d'environnement dans votre .bashrc

    export RUNSERVER_PORT = 8010

  2. Créer un alias

    alias runserver = 'django-admin runserver $ RUNSERVER_PORT'

J'utilise le wrapper zsh et virtualenvs. Je mets l'exportation dans les projets de script de postactivation et de port d'attribution pour chaque projet.

workon someproject
runserver
Pavel1114
la source
-2

Ceci est un ancien post mais pour ceux qui sont intéressés:

Si vous souhaitez modifier le numéro de port par défaut, lorsque vous exécutez la commande «runserver», vous démarrez avec votre port préféré, procédez comme suit:

  1. Trouvez votre installation python. (vous pouvez avoir plusieurs pythons installés et vous pouvez également avoir la version de votre environnement virtuel, alors assurez-vous de trouver la bonne)
  2. Dans le dossier python, recherchez le dossier site-packages. À l'intérieur, vous trouverez votre installation django
  3. Ouvrez le dossier django -> core -> gestion -> commandes
  4. Dans le dossier des commandes, ouvrez le script runserver.py avec un éditeur de texte
  5. Recherchez le champ DEFAULT_PORT. il est égal à 8000 par défaut. Changez-le comme vous le souhaitez DEFAULT_PORT = "8080"
  6. Redémarrez votre serveur: python manage.py runserver et voyez qu'il utilise votre numéro de port défini

Cela fonctionne avec python 2.7, mais il devrait également fonctionner avec les nouvelles versions de python. Bonne chance

Daniel Kiss
la source
11
C'est la pire suggestion de toutes ici. À mon humble avis, la modification d'un fichier à partir d'une distribution n'est jamais une bonne idée et prête à confusion car le changement n'est pas suivi par un VCS et est facilement écrasé.
Feuermurmel
Il n'est pas recommandé de modifier le module Django dans les packages du site. Il peut être mis à jour par une nouvelle version. Cela affecte également toutes les applications Django.
Sathindu Kavneth le
-3

J'étais aux prises avec le même problème et j'ai trouvé une solution. Je suppose que cela peut vous aider. lorsque vous exécutez python manage.py runserver, il prendra 127.0.0.1 comme adresse IP par défaut et 8000 comme numéro de port par défaut qui peut être configuré dans votre environnement python. Dans votre paramètre python, allez à <your python env>\Lib\site-packages\django\core\management\commands\runserver.pyet définissez 1. default_port = '<your_port>'
2. trouvez ceci sous la poignée def et définissez
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

Maintenant, si vous exécutez "python manage.py runserver", il fonctionnera par défaut sur "0.0.0.0:

Profitez du codage .....

Amrendra
la source
3
La modification des sources des packages dépendants est considérée comme une mauvaise pratique. Les modifications peuvent être perdues lors de la mise à jour / de la réinstallation.
arogachev
C'est vrai @arogachev, c'est juste une option par laquelle vous pouvez créer un port et un hôte par défaut. Mais ce n'est vraiment pas une bonne pratique de modifier les packages dépendants. vous pouvez également définir l'adresse IP et le port lorsque vous exécutez votre serveur dans l'invite de commande.
Amrendra