django mengubah port runserver default

129

Saya ingin membuat port default yang manage.py runservermendengarkan di specifiable secara asing config.ini. Apakah ada perbaikan yang lebih mudah daripada mem-parse sys.argvdi dalam manage.pydan memasukkan porta yang dikonfigurasi?

Tujuannya adalah untuk berjalan ./manage.py runservertanpa harus menentukan alamat dan port setiap kali tetapi harus mengambil argumen dari config.ini.

jonny
sumber
Jika Anda menjalankan perintah dari riwayat baris perintah, maka penekanan tombolnya bahkan lebih sedikit. Misalnya bagi saya itu "<ctrl-r> menjalankan <enter>", dan secara otomatis menjalankan perintah yang sama seperti yang terakhir kali, jadi port dll disertakan.
Jonathan Hartley

Jawaban:

176

buat skrip bash dengan yang berikut ini:

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

simpan sebagai runserver di direktori yang sama dengan manage.py

chmod +x runserver

dan menjalankannya sebagai

./runserver
Pablo Albornoz
sumber
Entah itu, atau saya sedang berpikir untuk menambahkan perintah manajemen kustom.
jonny
Anda tidak dapat menjalankan server pengembangan secara terprogram, jadi perintah khusus tidak akan berfungsi kecuali jika memanggil shell menggunakan sesuatu seperti call. Jika solusi ini berhasil untuk Anda, pastikan untuk menandainya sebagai terselesaikan.
Pablo Albornoz
Saya sebenarnya mulai menggunakan supervisoruntuk ini sekarang, yang membuatnya lebih mudah untuk dikelola. :-) Tetapi solusi Anda mungkin adalah solusi terbersih selain menulis runserverskrip khusus .
jonny
Supervisor adalah solusi yang baik karena saya tidak akan merekomendasikannya untuk menjalankan lingkungan pengembangan. Anda kehilangan keuntungan memiliki output server di terminal, antara lain. Jika Anda benar-benar ingin menggunakan supervisor, saran saya adalah menggunakannya dengan server WSGI berfitur lengkap seperti Gunicorn. Harap jangan menjalankan server pengembangan sebagai server produksi Anda ...
Pablo Albornoz
Ini berguna tetapi tidak greate ketika menyulap beberapa proyek sekaligus - Saya akan menerima jawaban di bawah ini yang menentukan port yang akan digunakan untuk setiap proyek yang berbeda. Hanya pendapat saya saja.
105

Sebenarnya cara termudah untuk mengubah (hanya) port dalam pengembangan server Django adalah seperti:

python manage.py runserver 7000

yang seharusnya menjalankan server pengembangan di http://127.0.0.1:7000/

Qback
sumber
2
Jawaban ini tentang mengubah port, bukan mengubah port default.
fisik
42

Mulai dari Django 1.9, solusi paling sederhana yang saya temukan (berdasarkan solusi Quentin Stafford-Fraser) adalah menambahkan beberapa baris manage.pyyang secara dinamis mengubah nomor port default sebelum menjalankan runserverperintah:

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
sumber
Meskipun tidak menjawab pertanyaan asli dengan tepat, dan indentasi kacau (kode harus menjorok dari "import django" ke bawah), saya lebih suka jawaban ini karena sepenuhnya mandiri dan tidak perlu mengubah apa yang dimasukkan di baris perintah.
PurpleDiane
1
@PurpleDiane Indentasi sudah diperbaiki.
Flimm
Manage.py saya tidak benar-benar terlihat seperti itu, saya kira Django berubah sejak
NaturalBornCamper
6
Saat ini (mulai 2.0.3) Anda dapat menambahkan: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080ke manage.py Anda. Anda juga dapat mengubah alamat mendengarkan dengan:runserver.default_addr
Vargas
29

Semua perintah berikut ini mungkin untuk mengubah port saat menjalankan django:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000
Krishnamoorthy Acharya
sumber
1
"Tujuannya adalah untuk menjalankan ./manage.py runserver tanpa harus menentukan alamat dan port setiap saat"
JuSTMOnIcAjUSTmONiCAJusTMoNICa
11

Buat subkelas django.core.management.commands.runserver.Commanddan timpa default_portanggota. Simpan file sebagai perintah manajemen Anda sendiri, misalnya di bawah <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

Saya memuat pengaturan formulir port default di sini (yang pada gilirannya membaca file konfigurasi lain), tetapi Anda juga dapat membacanya dari beberapa file lain secara langsung.

Feuermurmel
sumber
Ini sepertinya solusi terbaik, bagaimanapun, Django 1.8.14 saya tidak mengenali file yang saya buat sendiri runserver.py. Haruskah saya mendaftarkannya di suatu tempat?
fisik
@traksi fisik File Anda mungkin tidak berada di lokasi yang benar. docs.djangoproject.com/en/2.0/howto/custom-management-commands dimulai dengan deskripsi tempat meletakkan modul python untuk runserverperintah. Mungkin juga Anda memiliki aplikasi lain yang juga mendaftarkan perintah bernama runserver. Coba ganti nama perintah Anda dan lihat apakah itu dikenali.
Feuermurmel
1
Saya memasukkannya <app_name>/management/commands/runserver.py, tetapi kemudian yang asli Django runserverdigunakan. Saat saya mengganti namanya menjadi run_server.py, itu dikenali. Saya tidak melihat sesuatu yang istimewa tentang runserverpada halaman yang Anda tautkan.
fisik
Masalahnya adalah staticfilesmelakukan persis seperti yang Anda sarankan . Jadi, mengikuti instruksi Anda berhenti melayani file statis dalam pengembangan. Paling baik untuk mengimpor django.contrib.staticfiles.management.commands.
x-yuri
8

Kami membuat perintah manajemen 'runserver' baru yang merupakan pembungkus tipis di sekitar yang standar tetapi mengubah port default. Secara kasar, Anda membuat management/commands/runserver.pydan memasukkan sesuatu seperti ini:

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

Di Pycharm Anda cukup menambahkan port ke parameter

masukkan deskripsi gambar di sini

chaggy
sumber
1

Saya sangat terlambat ke pesta di sini, tetapi jika Anda menggunakan IDE seperti PyCharm, ada opsi di 'Edit Konfigurasi' di bawah menu 'Jalankan' (Jalankan> Edit Konfigurasi) di mana Anda dapat menentukan port default. Ini tentu saja relevan hanya jika Anda men-debug / menguji melalui PyCharm.

Smitty
sumber
1

Jika Anda ingin mengubah konfigurasi default, ikuti langkah-langkah ini:

  1. Buka perintah tipe terminal

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Sekarang buka file runserver.py di nano editor sebagai superuser

     $ sudo nano runserver.py
  3. temukan variabel 'default_port' maka Anda akan melihat port default no adalah '8000'. Sekarang Anda dapat mengubahnya menjadi apa pun yang Anda inginkan.

  4. Sekarang keluar dan simpan file menggunakan "CTRL + X dan Y untuk menyimpan file"

Catatan: Ganti <2/3> .x dengan versi python yang dapat digunakan

rhoitjadhav.dll
sumber
0
  1. Buat variabel lingkungan di .bashrc Anda

    ekspor RUNSERVER_PORT = 8010

  2. Buat alias

    alias runserver = 'django-admin runserver $ RUNSERVER_PORT'

Saya menggunakan zsh dan pembungkus virtualenvs. Saya menempatkan ekspor dalam proyek skrip postactivate dan port asign untuk setiap proyek.

workon someproject
runserver
Pavel1114
sumber
-2

Ini adalah posting lama tapi untuk mereka yang tertarik:

Jika Anda ingin mengubah nomor port default, maka ketika Anda menjalankan perintah "runserver", Anda mulai dengan port pilihan Anda lakukan ini:

  1. Temukan instalasi python Anda. (Anda dapat memasang beberapa ular sanca dan Anda juga dapat memiliki versi lingkungan virtual, jadi pastikan Anda menemukan yang tepat)
  2. Di dalam folder python cari folder paket situs. Di dalamnya Anda akan menemukan instalasi django Anda
  3. Buka folder django-> inti -> manajemen -> perintah
  4. Di dalam folder perintah, buka skrip runserver.py dengan editor teks
  5. Temukan bidang DEFAULT_PORT. itu sama dengan 8000 secara default. Ubah menjadi apa pun yang Anda suka DEFAULT_PORT = "8080"
  6. Mulai ulang server Anda: python manage.py runserver dan lihat bahwa ia menggunakan nomor port yang Anda setel

Ini berfungsi dengan python 2.7 tetapi harus bekerja dengan versi python yang lebih baru juga. Semoga berhasil

Daniel Kiss
sumber
11
Ini adalah saran terburuk dari semuanya di sini. IMHO, mengedit file dari distribusi bukanlah ide yang baik dan menyebabkan kebingungan karena perubahan tersebut tidak dilacak oleh VCS dan mudah ditimpa.
Feuermurmel
Tidak disarankan untuk mengedit modul Django pada paket situs. Itu dapat diperbarui dengan versi baru. Juga mempengaruhi semua aplikasi Django.
Sathindu Kaveth
-3

Saya berjuang dengan masalah yang sama dan menemukan satu solusi. Saya rasa ini dapat membantu Anda. ketika Anda menjalankan python manage.py runserver, ini akan mengambil 127.0.0.1 sebagai alamat ip default dan 8000 sebagai nomor port default yang dapat dikonfigurasi di lingkungan python Anda. Dalam pengaturan python Anda, pergi ke <your python env>\Lib\site-packages\django\core\management\commands\runserver.pydan set 1. default_port = '<your_port>'
2. temukan ini di bawah pegangan def dan set
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

Sekarang jika Anda menjalankan "python manage.py runserver" ini akan berjalan secara default di "0.0.0.0:

Nikmati coding .....

Amrendra
sumber
3
Memodifikasi sumber paket dependen dianggap praktik yang buruk. Perubahan bisa hilang saat update / instal ulang.
arogachev
Itu benar @arogachev, Ini hanya sebuah opsi di mana Anda dapat membuat port dan host default. Tetapi sebenarnya bukan praktik yang baik untuk mengubah paket dependen. Anda dapat mengatur IP dan port saat Anda menjalankan server Anda di command prompt juga.
Amrendra