django เปลี่ยนพอร์ตรันเนอร์เวอร์เริ่มต้น


130

ผมอยากจะทำให้พอร์ตเริ่มต้นที่manage.py runserverฟังใน specifiable config.iniในภายนอก มีวิธีแก้ไขที่ง่ายกว่าการแยกวิเคราะห์sys.argvภายในmanage.pyและใส่พอร์ตที่กำหนดค่าไว้หรือไม่?

เป้าหมายคือการเรียกใช้./manage.py runserverโดยไม่ต้องระบุที่อยู่และพอร์ตทุกครั้ง แต่ต้องใช้อาร์กิวเมนต์จากไฟล์config.ini.


หากคุณเรียกใช้คำสั่งจากประวัติบรรทัดคำสั่งก็จะยิ่งมีการกดแป้นพิมพ์น้อยลง เช่นสำหรับฉันมัน "<ctrl-r> รัน <enter>" และมันจะรันคำสั่งเดียวกับครั้งที่แล้วโดยอัตโนมัติดังนั้นพอร์ตและอื่น ๆ จึงรวมอยู่ด้วย
Jonathan Hartley

คำตอบ:


176

สร้าง bash script ดังต่อไปนี้:

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

บันทึกเป็นรันเนอร์เวอร์ใน dir เดียวกับ Manage.py

chmod +x runserver

และเรียกใช้เป็น

./runserver

ไม่อย่างนั้นหรือฉันกำลังคิดเกี่ยวกับการเพิ่มคำสั่งการจัดการแบบกำหนดเอง
จอนนี่

callคุณไม่สามารถใช้เซิร์ฟเวอร์การพัฒนาโปรแกรมเพื่อให้คำสั่งที่กำหนดเองจะไม่ทำงานจนกว่ามันเรียกเปลือกใช้สิ่งที่ต้องการ หากวิธีนี้ใช้ได้ผลสำหรับคุณโปรดตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายว่าแก้ไขแล้ว
Pablo Albornoz

ตอนนี้ฉันเริ่มใช้supervisorสิ่งนี้แล้วซึ่งช่วยให้จัดการได้ง่ายขึ้น :-) แต่ของคุณน่าจะเป็นวิธีแก้ปัญหาที่สะอาดที่สุดนอกเหนือจากการเขียนrunserverสคริปต์เฉพาะ
jonny

Supervisor เป็นทางออกที่ดีสำหรับฉันไม่แนะนำให้เรียกใช้สภาพแวดล้อมการพัฒนา คุณสูญเสียข้อได้เปรียบของการมีเอาต์พุตของเซิร์ฟเวอร์บนเทอร์มินัลเหนือสิ่งอื่นใด หากคุณต้องการใช้หัวหน้างานจริงๆคำแนะนำของฉันคือใช้กับเซิร์ฟเวอร์ WSGI ที่มีคุณสมบัติครบถ้วนเช่น Gunicorn โปรดอย่าเรียกใช้เซิร์ฟเวอร์การพัฒนาเป็นเซิร์ฟเวอร์ที่ใช้งานจริงของคุณ ...
Pablo Albornoz

สิ่งนี้มีประโยชน์ แต่ไม่น่าเบื่อเมื่อเล่นกลหลายโครงการพร้อมกัน - ฉันยอมรับคำตอบด้านล่างซึ่งระบุพอร์ตที่จะใช้สำหรับแต่ละโครงการที่แตกต่างกัน แค่ความเห็นของฉัน

105

จริงๆแล้ววิธีที่ง่ายที่สุดในการเปลี่ยนพอร์ต (เท่านั้น) ในการพัฒนาเซิร์ฟเวอร์ Django ก็เหมือนกับ:

python manage.py runserver 7000

ที่ควรเรียกใช้เซิร์ฟเวอร์การพัฒนาบนhttp://127.0.0.1:7000/


2
คำตอบนี้เกี่ยวกับการเปลี่ยนพอร์ตไม่ใช่การเปลี่ยนพอร์ตเริ่มต้น
กายภาพบำบัด

42

สำหรับ Django 1.9 วิธีแก้ปัญหาที่ง่ายที่สุดที่ฉันพบ (ตามโซลูชันของ Quentin Stafford-Fraser) คือการเพิ่มสองสามบรรทัดเพื่อmanage.pyแก้ไขหมายเลขพอร์ตเริ่มต้นแบบไดนามิกก่อนที่จะเรียกใช้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)

แม้ว่าจะไม่ได้ตอบคำถามเดิมอย่างตรงไปตรงมาและการเยื้องก็ยุ่งเหยิง (ควรเยื้องรหัสจาก "import django" ลงไป) ฉันชอบคำตอบนี้มากกว่าเพราะมันมีอยู่ในตัวเองทั้งหมดและไม่จำเป็นต้องเปลี่ยนสิ่งที่ป้อน ในบรรทัดคำสั่ง
PurpleDiane

1
@PurpleDiane การเยื้องได้รับการแก้ไข
Flimm

Manage.py ของฉันไม่ได้เป็นแบบนั้นฉันเดาว่า Django เปลี่ยนไปตั้งแต่
NaturalBornCamper

6
ปัจจุบัน (ณ วันที่ 2.0.3) คุณสามารถเพิ่ม: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080ใน Manage.py ของคุณได้ คุณยังสามารถเปลี่ยนที่อยู่ในการฟังได้ด้วย:runserver.default_addr
Vargas

30

คำสั่งต่อไปนี้ทั้งหมดสามารถเปลี่ยนพอร์ตได้ในขณะที่รัน django:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000

1
"เป้าหมายคือการเรียกใช้. /manage.py รันเนอร์เวอร์โดยไม่ต้องระบุที่อยู่และพอร์ตทุกครั้ง"
JuSTMOnIcAjUSTmONiCAJusTMoNICa

11

สร้างคลาสย่อยdjango.core.management.commands.runserver.Commandและเขียนทับdefault_portสมาชิก บันทึกไฟล์เป็นคำสั่งการจัดการของคุณเองเช่นภายใต้<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

ฉันกำลังโหลดการตั้งค่ารูปแบบพอร์ตเริ่มต้นที่นี่ (ซึ่งจะอ่านไฟล์การกำหนดค่าอื่น ๆ ) แต่คุณสามารถอ่านจากไฟล์อื่นได้โดยตรง


ดูเหมือนว่าจะเป็นทางออกที่ดีที่สุด แต่ Django 1.8.14 ของฉันไม่รู้จักไฟล์ที่สร้างขึ้นrunserver.pyเอง ฉันควรลงทะเบียนที่ไหนสักแห่งไหม
กายภาพบำบัด

@physicalattraction ไฟล์ของคุณอาจไม่อยู่ในตำแหน่งที่ถูกต้อง docs.djangoproject.com/en/2.0/howto/custom-management-commandsเริ่มต้นด้วยคำอธิบายตำแหน่งที่จะใส่โมดูล python สำหรับrunserverคำสั่ง นอกจากนี้คุณอาจจะมีการตรวจสอบอีกนอกจากนี้ยังมีrunserverการลงทะเบียนคำสั่งที่มีชื่อว่า ลองเปลี่ยนชื่อคำสั่งของคุณและดูว่าเป็นที่รู้จักหรือไม่
Feuermurmel

1
ฉันใส่เข้าไป<app_name>/management/commands/runserver.pyแต่แล้วrunserverก็ใช้ต้นฉบับของ Django เมื่อฉันเปลี่ยนชื่อrun_server.pyเป็นจะจำได้ ฉันไม่เห็นอะไรเป็นพิเศษเกี่ยวกับrunserverหน้าที่คุณลิงก์ไป
กายภาพบำบัด

สิ่งที่เป็นstaticfilesไม่ตรงกับสิ่งที่คุณแนะนำ ดังนั้นการทำตามคำแนะนำของคุณจึงหยุดให้บริการไฟล์แบบคงที่ในการพัฒนา นำเข้าจากdjango.contrib.staticfiles.management.commands.
x-yuri

8

เราได้สร้างคำสั่งการจัดการ 'รันเนอร์เวอร์' ใหม่ซึ่งเป็นกระดาษห่อหุ้มแบบบางรอบ ๆ มาตรฐาน แต่เปลี่ยนพอร์ตเริ่มต้น โดยประมาณคุณสร้างmanagement/commands/runserver.pyและใส่สิ่งนี้:

# 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


1

ฉันมาปาร์ตี้ที่นี่ช้ามาก แต่ถ้าคุณใช้ IDE เช่น PyCharm มีตัวเลือกใน 'แก้ไขการกำหนดค่า' ภายใต้เมนู 'เรียกใช้' (เรียกใช้> แก้ไขการกำหนดค่า) ซึ่งคุณสามารถระบุพอร์ตเริ่มต้นได้ แน่นอนว่าสิ่งนี้เกี่ยวข้องเฉพาะในกรณีที่คุณกำลังแก้จุดบกพร่อง / ทดสอบผ่าน PyCharm


1

หากคุณต้องการเปลี่ยนการกำหนดค่าเริ่มต้นให้ทำตามขั้นตอนนี้:

  1. เปิดคำสั่งประเภทเทอร์มินัล

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. ตอนนี้เปิดไฟล์ runerver.py ในตัวแก้ไขนาโนเป็น superuser

     $ sudo nano runserver.py
  3. ค้นหาตัวแปร 'default_port' จากนั้นคุณจะเห็นพอร์ตเริ่มต้นคือ '8000' ตอนนี้คุณสามารถเปลี่ยนเป็นอะไรก็ได้ที่คุณต้องการ

  4. ตอนนี้ออกและบันทึกไฟล์โดยใช้ "CTRL + X และ Y เพื่อบันทึกไฟล์"

หมายเหตุ: แทนที่ <2/3> .x ด้วย python เวอร์ชันที่ใช้งานได้ของคุณ


0
  1. สร้างตัวแปรสภาพแวดล้อมใน. bashrc ของคุณ

    ส่งออก RUNSERVER_PORT = 8010

  2. สร้างนามแฝง

    นามแฝง runerver = 'django-admin runningerver $ RUNSERVER_PORT'

ฉันใช้กระดาษห่อ zsh และ Virtualenvs ฉันใส่การส่งออกในโครงการ postactivate script และ asign port สำหรับทุกโครงการ

workon someproject
runserver

-2

นี่เป็นโพสต์เก่า แต่สำหรับผู้ที่สนใจ:

หากคุณต้องการเปลี่ยนหมายเลขพอร์ตเริ่มต้นดังนั้นเมื่อคุณรันคำสั่ง "runningerver" คุณเริ่มต้นด้วยพอร์ตที่คุณต้องการให้ทำดังนี้:

  1. ค้นหาการติดตั้ง python ของคุณ (คุณสามารถติดตั้ง pythons ได้หลายตัวและคุณสามารถติดตั้งเวอร์ชันสภาพแวดล้อมเสมือนได้เช่นกันดังนั้นอย่าลืมหาสิ่งที่ถูกต้อง)
  2. ภายในโฟลเดอร์ python ค้นหาโฟลเดอร์ไซต์แพ็คเกจ ภายในนั้นคุณจะพบการติดตั้ง django ของคุณ
  3. เปิดโฟลเดอร์ django-> core -> management -> คำสั่ง
  4. ภายในโฟลเดอร์คำสั่งเปิดสคริปต์ runerver.py ด้วยโปรแกรมแก้ไขข้อความ
  5. ค้นหาฟิลด์ DEFAULT_PORT มันจะเท่ากับ 8000 โดยค่าเริ่มต้น เปลี่ยนเป็นสิ่งที่คุณต้องการ DEFAULT_PORT = "8080"
  6. รีสตาร์ทเซิร์ฟเวอร์ของคุณ: python Manage.py runerver และดูว่าใช้หมายเลขพอร์ตที่คุณตั้งไว้

ทำงานร่วมกับ python 2.7 แต่ควรใช้กับ python เวอร์ชันใหม่กว่าด้วย โชคดี


11
นี่เป็นคำแนะนำที่แย่ที่สุดของที่นี่ IMHO การแก้ไขไฟล์จากการแจกจ่ายไม่ใช่ความคิดที่ดีและนำไปสู่ความสับสนเนื่องจาก VCS ไม่ติดตามการเปลี่ยนแปลงและถูกเขียนทับได้อย่างง่ายดาย
Feuermurmel

ไม่แนะนำให้แก้ไขโมดูล Django ที่แพ็คเกจไซต์ สามารถอัปเดตโดยเวอร์ชันใหม่ได้ นอกจากนี้ยังมีผลกับแอพ Django ทั้งหมด
Sathindu Kavneth

-3

ฉันกำลังดิ้นรนกับปัญหาเดียวกันและพบทางออกหนึ่ง ฉันเดาว่ามันช่วยคุณได้ เมื่อคุณเรียกใช้python manage.py runserverจะใช้ 127.0.0.1 เป็นที่อยู่ IP เริ่มต้นและ 8000 เป็นหมายเลขพอร์ตเริ่มต้นซึ่งสามารถกำหนดค่าได้ในสภาพแวดล้อม python ของคุณ ในการตั้งค่า python ของคุณไปที่<your python env>\Lib\site-packages\django\core\management\commands\runserver.pyและตั้งค่า 1 default_port = '<your_port>'
2. ค้นหาสิ่งนี้ภายใต้การจัดการ def และตั้งค่า
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

ตอนนี้ถ้าคุณเรียกใช้ "python Manage.py runningerver" มันจะทำงานตามค่าเริ่มต้นที่ "0.0.0.0:

สนุกกับการเขียนโค้ด .....


3
การแก้ไขแหล่งที่มาของแพ็กเกจที่อ้างอิงถือเป็นการปฏิบัติที่ไม่ดี การเปลี่ยนแปลงอาจสูญหายไปในการอัปเดต / การติดตั้งใหม่
arogachev

ถูกต้อง @arogachev เป็นเพียงตัวเลือกที่คุณสามารถสร้างพอร์ตและโฮสต์เริ่มต้นได้ แต่การปรับเปลี่ยนแพ็กเกจที่อ้างอิงนั้นไม่ใช่แนวทางปฏิบัติที่ดี คุณสามารถตั้งค่า IP และพอร์ตเมื่อคุณเรียกใช้เซิร์ฟเวอร์ในพรอมต์คำสั่งได้เช่นกัน
Amrendra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.