porta do servidor de execução padrão do django change

128

Eu gostaria de tornar a porta padrão que manage.py runserverescuta especificável de forma estranha config.ini. Existe uma solução mais fácil do que analisar sys.argvdentro manage.pye inserir a porta configurada?

O objetivo é executar ./manage.py runserversem precisar especificar endereço e porta todas as vezes, mas com os argumentos do config.ini.

Jonny
fonte
Se você executar o comando a partir do histórico da linha de comando, haverá ainda menos pressionamentos de tecla. Por exemplo, para mim, é "<ctrl-r> roda <enter>" e executa automaticamente o mesmo comando da última vez, portanto a porta etc está incluída.
Jonathan Hartley

Respostas:

175

crie um script bash com o seguinte:

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

salve-o como servidor de execução no mesmo diretório que manage.py

chmod +x runserver

e execute-o como

./runserver
Pablo Albornoz
fonte
Ou isso, ou estou pensando em adicionar um comando de gerenciamento personalizado.
jonny
Você não pode executar o servidor de desenvolvimento programaticamente, portanto, um comando personalizado não funcionará, a menos que chame o shell usando algo parecido call. Se esta solução funcionar para você, marque-a como resolvida.
Pablo Albornoz
Na verdade, comecei a usar supervisorisso agora, o que facilita ainda mais o gerenciamento. :-) Mas a sua provavelmente é a solução mais limpa, além de escrever um runserverscript dedicado .
Jonny
O supervisor é uma boa solução, pois eu não recomendaria a execução do ambiente de desenvolvimento. Você perde a vantagem de ter a saída do servidor no terminal, entre outras coisas. Se você realmente deseja usar o supervisor, meu conselho seria usá-lo com um servidor WSGI completo como o Gunicorn. Por favor, não executar o servidor de desenvolvimento como o seu servidor de produção ...
Pablo Albornoz
Isso é útil, mas não greate, ao manipular vários projetos ao mesmo tempo - eu aceitaria a resposta abaixo, que especifica a porta a ser usada para cada projeto distinto. Apenas minha opinião tho.
105

Na verdade, a maneira mais fácil de mudar (apenas) a porta no servidor Django de desenvolvimento é como:

python manage.py runserver 7000

que deve executar o servidor de desenvolvimento em http://127.0.0.1:7000/

Qback
fonte
1
Esta resposta é sobre alterar a porta, não alterar a porta padrão.
physicalattraction
42

No Django 1.9, a solução mais simples que encontrei (com base na solução de Quentin Stafford-Fraser) é adicionar algumas linhas nas manage.pyquais modificar dinamicamente o número da porta padrão antes de chamar o runservercomando:

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
fonte
Embora não responda exatamente à pergunta original e o recuo esteja desarrumado (o código deve ser recuado de "import django" para baixo), eu prefiro essa resposta porque é totalmente independente e não requer alteração do que foi digitado na linha de comando.
PurpleDiane
1
@PurpleDiane O recuo é fixo.
Flimm
Meu manage.py não realmente parecido com isso, eu acho Django mudou desde
NaturalBornCamper
6
Atualmente (a partir do 2.0.3), você pode simplesmente adicionar: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080ao seu manage.py. Você também pode alterar o endereço de escuta com:runserver.default_addr
Vargas
29

Todos os seguintes comandos são possíveis de alterar a porta enquanto executa o django:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000
Krishnamoorthy Acharya
fonte
1
"O objetivo é executar runserver ./manage.py sem ter que especificar o endereço e porta cada vez"
criptych está com Monica
11

Crie uma subclasse django.core.management.commands.runserver.Commande substitua o default_portmembro. Salve o arquivo como um comando de gerenciamento próprio, por exemplo, em <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

Estou carregando as configurações padrão do formulário de porta aqui (que por sua vez lê outros arquivos de configuração), mas você também pode lê-lo diretamente de algum outro arquivo.

Feuermurmel
fonte
Essa parece ser a melhor solução, no entanto, meu Django 1.8.14 não reconhece meu arquivo auto-criado runserver.py. Devo registrá-lo em algum lugar?
physicalattraction
@physicalattraction Seu arquivo provavelmente não está no local certo. docs.djangoproject.com/en/2.0/howto/custom-management-commands começa com uma descrição de onde colocar o módulo python para o runservercomando. Também talvez você tem um outro aplicativo também registrar um comando chamado runserver. Tente renomear seu comando e veja se ele é reconhecido.
Feuermurmel
1
Eu o coloquei <app_name>/management/commands/runserver.py, mas o original do Django runserveré usado. Quando eu o renomeio run_server.py, é reconhecido. Não vejo nada de especial runserverna página para a qual você vincula.
physicalattraction
A coisa é staticfilesexatamente o que você sugere . Portanto, siga as instruções das interrupções que atendem arquivos estáticos em desenvolvimento. É melhor importar de django.contrib.staticfiles.management.commands.
X-yuri
8

Criamos um novo comando de gerenciamento 'runserver', que é um invólucro fino em torno do padrão, mas altera a porta padrão. Aproximadamente, você cria management/commands/runserver.pye coloca algo assim:

# 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
fonte
2

No Pycharm, você pode simplesmente adicionar a porta aos parâmetros

insira a descrição da imagem aqui

chaggy
fonte
1

Estou muito atrasado para a festa aqui, mas se você usar um IDE como PyCharm, há uma opção em 'Editar configurações' no menu 'Executar' (Executar> Editar configurações), onde você pode especificar uma porta padrão. Obviamente, isso é relevante apenas se você estiver depurando / testando através do PyCharm.

Smitty
fonte
1

Se você deseja alterar as configurações padrão, siga estas etapas:

  1. Comando tipo terminal aberto

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Agora abra o arquivo runserver.py no editor nano como superusuário

     $ sudo nano runserver.py
  3. encontre a variável 'default_port' e você verá que a porta padrão no é '8000'. Agora você pode alterá-lo para o que quiser.

  4. Agora saia e salve o arquivo usando "CTRL + X e Y para salvar o arquivo"

Nota: Substitua <2/3> .x pela sua versão utilizável do python

rhoitjadhav
fonte
0
  1. Crie uma variável de ambiente no seu .bashrc

    exportar RUNSERVER_PORT = 8010

  2. Criar alias

    alias runserver = 'servidor de execução django-admin $ RUNSERVER_PORT'

Estou usando o wrapper zsh e virtualenvs. Coloquei exportação nos projetos, script pós-ativo e porta de atribuição para cada projeto.

workon someproject
runserver
Pavel1114
fonte
-2

Este é um post antigo, mas para aqueles que estão interessados:

Se você deseja alterar o número da porta padrão, portanto, ao executar o comando "runserver", comece com a porta preferida, faça o seguinte:

  1. Encontre a sua instalação python. (você pode ter vários pítons instalados e também a versão do seu ambiente virtual, para encontrar o caminho certo)
  2. Dentro da pasta python, localize a pasta site-packages. Dentro dele você encontrará sua instalação do django
  3. Abra a pasta django -> núcleo -> gerenciamento -> comandos
  4. Dentro da pasta de comandos, abra o script runserver.py com um editor de texto
  5. Encontre o campo DEFAULT_PORT. é igual a 8000 por padrão. Altere para o que quiser DEFAULT_PORT = "8080"
  6. Reinicie seu servidor: python manage.py runserver e veja se ele usa o número da porta configurada

Ele funciona com o python 2.7, mas também deve funcionar com versões mais recentes do python. Boa sorte

Daniel Kiss
fonte
11
Esta é a pior sugestão de todas aqui. IMHO, editar um arquivo a partir de uma distribuição nunca é uma boa idéia e causa confusão, porque a alteração não é rastreada por um VCS e é facilmente substituída.
Feuermurmel 20/02
Não é recomendado editar o módulo Django nos pacotes do site. Pode ser atualizado por nova versão. Também afeta a todos os aplicativos Django.
Sathindu Kavneth
-3

Eu estava lutando com o mesmo problema e encontrei uma solução. Eu acho que isso pode ajudá-lo. Quando você executa python manage.py runserver, ele usa 127.0.0.1 como endereço IP padrão e 8000 como número de porta padrão que pode ser configurado em seu ambiente python. Na sua configuração python, vá para <your python env>\Lib\site-packages\django\core\management\commands\runserver.pye defina 1. default_port = '<your_port>'
2. encontre isso em def handle e defina
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

Agora, se você executar "python manage.py runserver", ele será executado por padrão em "0.0.0.0:

Desfrute de codificação .....

Amrendra
fonte
3
Modificar as fontes de pacotes dependentes é considerado uma má prática. As alterações podem ser perdidas na atualização / reinstalação.
Arogachev
É isso mesmo @arogachev, é apenas uma opção pela qual você pode criar porta e host padrão. Mas realmente não é uma boa prática modificar pacotes dependentes. você pode definir o IP e a porta ao executar o servidor no prompt de comando também.
Amrendra