django varsayılan çalıştırma sunucusu bağlantı noktasını değiştir


130

manage.py runserverDinleyen varsayılan bağlantı noktasını bir yabancıda tanımlanabilir hale getirmek istiyorum config.ini. Yapılandırılan bağlantı noktasının sys.argviçini ayrıştırıp yerleştirmekten daha kolay bir düzeltme var mı manage.py?

Amaç, ./manage.py runserverher seferinde adres ve bağlantı noktası belirtmek zorunda kalmadan, ancak argümanları config.ini.


Komutu komut satırı geçmişinizden çalıştırırsanız, daha da az tuş vuruşu olur. Örneğin benim için "<ctrl-r> <enter> 'ı çalıştırır ve otomatik olarak geçen seferki ile aynı komutu çalıştırır, bu nedenle bağlantı noktası vb. Dahildir.
Jonathan Hartley

Yanıtlar:


176

aşağıdakilerle bir bash betiği oluşturun:

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

Manage.py ile aynı dizine runserver olarak kaydedin

chmod +x runserver

ve olarak çalıştır

./runserver

Ya öyle ya da özel bir yönetim komutu eklemeyi düşünüyorum.
jonny

Geliştirme sunucusunu programlı olarak çalıştıramazsınız, bu nedenle özel bir komut, benzeri bir şey kullanarak kabuğu çağırmadıkça çalışmayacaktır call. Bu çözüm sizin için işe yararsa, lütfen çözüldü olarak işaretlediğinizden emin olun.
Pablo Albornoz

Aslında supervisorbunun için kullanmaya başladım , bu da yönetmeyi daha da kolaylaştırıyor. :-) Ama sizinki muhtemelen özel bir runserverbetik yazmaktan başka en temiz çözümdür .
jonny

Süpervizör iyi bir çözüm çünkü geliştirme ortamını çalıştırmasını tavsiye etmem. Diğer şeylerin yanı sıra, terminalde sunucu çıkışına sahip olma avantajını kaybedersiniz. Gerçekten süpervizörü kullanmak istiyorsanız, tavsiyem onu ​​Gunicorn gibi tam özellikli bir WSGI sunucusuyla kullanmak olacaktır. Lütfen geliştirme sunucusunu üretim sunucunuz olarak çalıştırmayın ...
Pablo Albornoz

Bu yararlıdır, ancak aynı anda birden fazla projeyle uğraşılırken çok da iyi değildir - Her bir farklı proje için kullanılacak bağlantı noktasını belirten aşağıdaki yanıtı kabul ederdim. Sadece benim fikrim tho.

105

Aslında geliştirme Django sunucusunda bağlantı noktasını değiştirmenin (yalnızca) en kolay yolu şuna benzer:

python manage.py runserver 7000

http://127.0.0.1:7000/ üzerinde geliştirme sunucusunu çalıştırması gereken


2
Bu yanıt, varsayılan bağlantı noktasını değiştirmekle değil, bağlantı noktasını değiştirmekle ilgilidir.
fiziksel

42

Django 1.9'dan itibaren, bulduğum en basit çözüm (Quentin Stafford-Fraser'ın çözümüne dayanarak), komutu çalıştırmadan manage.pyönce varsayılan bağlantı noktası numarasını dinamik olarak değiştiren birkaç satır eklemektir runserver:

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)

Orijinal soruya tam olarak cevap vermemesine ve girintileme karışık olmasına rağmen (kod, "django içe aktar" kısmından aşağıya doğru girintili olmalıdır), bu cevabı tercih ediyorum çünkü tamamen kendi kendine yetiyor ve girileni değiştirmeyi gerektirmiyor komut satırında.
PurpleDiane

1
@PurpleDiane Girinti düzeltildi.
Flimm

Manage.py'im pek öyle görünmüyor, sanırım Django o zamandan beri değişti
NaturalBornCamper

6
Şu anda (2.0.3 itibariyle) şunları ekleyebilirsiniz: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080manage.py dosyanıza. Dinleme adresini şununla da değiştirebilirsiniz:runserver.default_addr
Vargas

30

Aşağıdaki komutların tümü django çalıştırılırken bağlantı noktasını değiştirmek mümkündür:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000

1
"Amaç ./manage.py runserver'ı her seferinde adres ve bağlantı noktası belirtmek zorunda kalmadan çalıştırmaktır"
JuSTMOnIcAjUSTmONiCAJusTMoNICa

11

Üyenin alt sınıfını oluşturun django.core.management.commands.runserver.Commandve üzerine yazın default_port. Dosyayı kendi başınıza bir yönetim komutu olarak kaydedin, örneğin <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

Burada varsayılan bağlantı noktası formu ayarlarını yüklüyorum (bu da diğer yapılandırma dosyalarını okuyor), ancak onu başka bir dosyadan da doğrudan okuyabilirsiniz.


Bu en iyi çözüm gibi görünüyor, ancak Django 1.8.14 cihazım kendi oluşturduğum dosyamı tanımıyor runserver.py. Onu bir yere kaydettirmeli miyim?
fiziksel

@physicalattraction Dosyanız muhtemelen doğru yerde değil. docs.djangoproject.com/en/2.0/howto/custom-management-commands , runserverkomut için python modülünün nereye yerleştirileceğinin bir açıklamasıyla başlar . Ayrıca, adında bir komut kaydeden başka bir uygulamanız da olabilirrunserver . Komutunuzu yeniden adlandırmayı deneyin ve tanınıp tanınmadığını görün.
Feuermurmel

1
Ben koydum <app_name>/management/commands/runserver.pyama sonra Django'nun orijinali runserverkullanılıyor. Olarak yeniden adlandırdığımda run_server.pytanınır. runserverBağlantı verdiğiniz sayfada özel bir şey göremiyorum .
fiziksel

Şey, staticfilestam olarak ne önerdiğinizi yapıyor . Dolayısıyla, talimatlarınızı takip etmek, geliştirme aşamasında statik dosyaların sunulmasını keser. Alanından içe aktarmak en iyisidir django.contrib.staticfiles.management.commands.
x-yuri

8

Standart olanın etrafında ince bir sarmalayıcı olan ancak varsayılan bağlantı noktasını değiştiren yeni bir 'çalıştırma sunucusu' yönetim komutu oluşturduk. Kabaca şöyle bir management/commands/runserver.pyşey yaratır ve koyarsınız:

# 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

2

Pycharm'da bağlantı noktasını parametrelere ekleyebilirsiniz.

görüntü açıklamasını buraya girin


1

Buradaki partiye çok geç kaldım, ancak PyCharm gibi bir IDE kullanıyorsanız, 'Çalıştır' menüsü altındaki 'Yapılandırmaları Düzenle' seçeneğinde (Çalıştır> Yapılandırmaları Düzenle) varsayılan bir bağlantı noktası belirleyebileceğiniz bir seçenek var. Bu elbette, yalnızca PyCharm aracılığıyla hata ayıklama / test etme işlemi yapıyorsanız geçerlidir.


1

Varsayılan konfigürasyonları değiştirmek isterseniz, şu adımları izleyin:

  1. Terminal tipi komutunu aç

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Şimdi runserver.py dosyasını nano düzenleyicide süper kullanıcı olarak açın

     $ sudo nano runserver.py
  3. 'default_port' değişkenini bulun, ardından varsayılan bağlantı noktası numarasının '8000' olduğunu göreceksiniz. Şimdi onu istediğiniz gibi değiştirebilirsiniz.

  4. Şimdi çıkın ve "CTRL + X ve Y'yi kullanarak dosyayı kaydedin"

Not: <2/3> .x 'i kullanılabilir python sürümünüzle değiştirin


0
  1. .Bashrc dosyanızda ortam değişkeni oluşturun

    dışa aktar RUNSERVER_PORT = 8010

  2. Takma ad oluştur

    alias runserver = 'django-admin runserver $ RUNSERVER_PORT'

Zsh ve virtualenvs sarıcı kullanıyorum. Projelere postactivate script ve her proje için port atayın.

workon someproject
runserver

-2

Bu eski bir gönderi ama ilgilenenler için:

Varsayılan bağlantı noktası numarasını değiştirmek istiyorsanız, böylece "runserver" komutunu çalıştırdığınızda tercih ettiğiniz bağlantı noktasıyla başlayın:

  1. Python kurulumunuzu bulun. (birden fazla piton kurabilirsiniz ve sanal ortam sürümünüze de sahip olabilirsiniz, bu nedenle doğru olanı bulduğunuzdan emin olun)
  2. Python klasörünün içinde site paketleri klasörünü bulun. Bunun içinde django kurulumunuzu bulacaksınız
  3. Django klasörünü açın-> çekirdek -> yönetim -> komutları
  4. Komutlar klasörünün içinde runserver.py komut dosyasını bir metin düzenleyiciyle açın
  5. DEFAULT_PORT alanını bulun. varsayılan olarak 8000'e eşittir. Ne istersen değiştir DEFAULT_PORT = "8080"
  6. Sunucunuzu yeniden başlatın: python manage.py runserver ve ayarladığınız bağlantı noktası numaranızı kullandığını görün

Python 2.7 ile çalışır, ancak python'un daha yeni sürümleriyle de çalışmalıdır. İyi şanslar


11
Bu, buradaki en kötü öneri. IMHO, bir dağıtımdaki bir dosyayı düzenlemek asla iyi bir fikir değildir ve kafa karışıklığına yol açar çünkü değişiklik bir VCS tarafından izlenmez ve kolayca üzerine yazılır.
Feuermurmel

Site paketlerinde Django modülünü düzenlemeniz önerilmez. Yeni versiyon ile güncellenebilir. Ayrıca tüm Django uygulamalarını etkiler.
Sathindu Kavneth

-3

Aynı sorunla mücadele ediyordum ve bir çözüm buldum. Sanırım sana yardımcı olabilir. çalıştırdığınızda python manage.py runserver, varsayılan ip adresi olarak 127.0.0.1 ve python ortamınızda yapılandırılabilen varsayılan port numarası olarak 8000 alacaktır. Python ayarınızda <your python env>\Lib\site-packages\django\core\management\commands\runserver.py1'e gidin ve ayarlayın. default_port = '<your_port>'
2. Bunu def handle ve set altında bulun
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

Şimdi "python manage.py runserver" ı çalıştırırsanız, varsayılan olarak "0.0.0.0:

Kodlamanın tadını çıkarın .....


3
Bağımlı paketlerin kaynaklarını değiştirmek kötü bir uygulama olarak kabul edilir. Güncelleme / yeniden yükleme sırasında değişiklikler kaybolabilir.
arogachev 01

Doğru @arogachev, Bu sadece varsayılan port ve host yapabileceğiniz bir seçenektir. Ancak bağımlı paketleri değiştirmek gerçekten iyi bir uygulama değildir. sunucunuzu komut isteminde çalıştırdığınızda da IP ve bağlantı noktasını ayarlayabilirsiniz.
Amrendra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.