django default default runserver port को बदलते हैं


129

मैं डिफ़ॉल्ट पोर्ट बनाना चाहूंगा जो कि manage.py runserverकिसी एक्स्ट्राजेन में निर्दिष्ट पर सुनता हो config.ini। क्या sys.argvअंदर पार्स करने manage.pyऔर कॉन्फ़िगर किए गए पोर्ट को डालने की तुलना में एक आसान निर्धारण है ?

लक्ष्य ./manage.py runserverहर बार पते और पोर्ट को निर्दिष्ट किए बिना चलाना है, लेकिन इसे तर्क से लेना है config.ini


यदि आप अपने कमांड लाइन इतिहास से कमांड चलाते हैं, तो यह कम कीस्ट्रोक है। मेरे लिए यह "<ctrl-r> रन <दर्ज>" है, और यह स्वचालित रूप से पिछली बार के समान कमांड चलाता है, इसलिए पोर्ट आदि को शामिल किया गया है।
जोनाथन हार्टले

जवाबों:


176

निम्नलिखित के साथ बैश स्क्रिप्ट बनाएं:

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

इसे प्रबंधकर्ता के रूप में उसी dir में रनर के रूप में सहेजें

chmod +x runserver

और इसे चलाने के रूप में

./runserver

या तो वह, या मैं एक कस्टम प्रबंधन कमांड जोड़ने के बारे में सोच रहा हूं।
जॉनी

आप विकास सर्वर को प्रोग्रामेटिक रूप से नहीं चला सकते हैं, इसलिए एक कस्टम कमांड तब तक काम नहीं करेगा जब तक कि वह शेल का उपयोग कुछ इस तरह से न करे call। यदि यह समाधान आपके लिए काम करता है तो कृपया इसे हल के रूप में चिह्नित करना सुनिश्चित करें।
पाब्लो अल्बोर्नोज़

मैंने वास्तव में supervisorअब इसके लिए उपयोग करना शुरू कर दिया है , जिससे इसे प्रबंधित करना और भी आसान हो जाता है। :-) लेकिन आपका एक समर्पित runserverस्क्रिप्ट लिखने के अलावा शायद सबसे साफ समाधान है ।
जॉनी

पर्यवेक्षक मेरे लिए एक अच्छा समाधान है कि मैं इसे विकास के माहौल को चलाने की सिफारिश नहीं करूँगा। आप टर्मिनल पर सर्वर आउटपुट अन्य चीजों के बीच होने का लाभ खो देते हैं। यदि आप वास्तव में पर्यवेक्षक का उपयोग करना चाहते हैं, तो मेरी सलाह यह है कि इसे Gunicorn जैसे पूर्ण रूप से चित्रित WSGI सर्वर के साथ उपयोग करें। कृपया अपने उत्पादन सर्वर के रूप में विकास सर्वर को न चलाएं ...
पाब्लो अल्बोर्नोज़

एक समय में कई प्रोजेक्ट्स की जुगलबंदी करते समय यह उपयोगी है, लेकिन महान नहीं है - मैंने नीचे दिए गए उत्तर को स्वीकार कर लिया होगा जो पोर्ट को प्रत्येक अलग प्रोजेक्ट के लिए उपयोग करने के लिए निर्दिष्ट करता है। बस मेरी राय थो।

105

वास्तव में विकास का सबसे आसान तरीका (केवल) पोर्ट Django सर्वर में है:

python manage.py runserver 7000

कि http://127.0.0.1:7000/ पर विकास सर्वर चलाना चाहिए


2
यह उत्तर पोर्ट को बदलने के बारे में है, डिफ़ॉल्ट पोर्ट को नहीं बदलने के लिए।
शारीरिक

42

Django 1.9 के रूप में, मैंने पाया सबसे सरल समाधान (क्वेंटिन स्टैफ़ोर्ड-फ्रेजर के समाधान के आधार पर) कुछ पंक्तियों को जोड़ने के लिए है 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)

हालाँकि यह मूल प्रश्न का सटीक उत्तर नहीं देता है, और इंडेंटिंग गड़बड़ हो जाती है (कोड को नीचे "आयात django" से इंडेंट किया जाना चाहिए), मैं इस उत्तर को पसंद करता हूं क्योंकि यह पूरी तरह से स्व-निहित है और इसे दर्ज करने की आवश्यकता नहीं है। कमांड लाइन पर।
पर्पलियन

1
@PurpleDiane इंडेंटेशन तय है।
फ्लिकेम


6
वर्तमान में (2.0.3 के अनुसार) आप from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080अपने मैनेजमेक्सो में सिर्फ जोड़ सकते हैं: आप इसके साथ सुनने का पता भी बदल सकते हैं:runserver.default_addr
वर्गास

29

Django चलाने के दौरान पोर्ट को बदलने के लिए निम्नलिखित सभी आदेश संभव हैं:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000

1
"लक्ष्य को चलाना है। हर समय पते और पोर्ट को निर्दिष्ट किए बिना/manage.py runserver"
criptych, Monica

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

@physicalattraction आपकी फ़ाइल शायद सही स्थान पर नहीं है। docs.djangoproject.com/en/2.0/howto/custom-management-commandsrunserver कमांड के लिए पायथन मॉड्यूल को कहां रखा जाए, इसके विवरण के साथ शुरू होता है । हो सकता है कि आपके पास एक और ऐप भी हो, जिसका नाम कमांड हो runserver। अपने आदेश का नाम बदलने का प्रयास करें और देखें कि क्या यह मान्यता प्राप्त है।
फ़्यूएर्मुरमेल

1
मैंने इसे डाल दिया <app_name>/management/commands/runserver.py, लेकिन फिर Django के मूल runserverका उपयोग किया जाता है। जब मैं इसका नाम बदल देता हूं run_server.py, तो इसे पहचान लिया जाता है। मुझे runserverआपके द्वारा लिंक किए गए पृष्ठ पर कुछ विशेष दिखाई नहीं देता है।
शारीरिक

बात वही staticfilesकरती है जो आप सुझाते हैं । इसलिए आपके निर्देशों का पालन करने से विकास में स्थिर फाइलों की सेवा होती है। से आयात करना सबसे अच्छा है django.contrib.staticfiles.management.commands
x- यूरी

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

2

Pycharm में आप बस पोर्ट को मापदंडों में जोड़ सकते हैं

यहाँ छवि विवरण दर्ज करें


1

मुझे यहाँ पार्टी करने में बहुत देर हो रही है, लेकिन अगर आप PyCharm की तरह एक IDE का उपयोग करते हैं, तो 'रन' मेनू (रन> एडिट कॉन्फ़िगरेशन) के तहत 'एडिट कॉन्फ़िगरेशन' में एक विकल्प है जहाँ आप एक डिफ़ॉल्ट पोर्ट निर्दिष्ट कर सकते हैं। यह निश्चित रूप से केवल तभी प्रासंगिक है जब आप PyCharm के माध्यम से डिबगिंग / परीक्षण कर रहे हैं।


1

यदि आप डिफ़ॉल्ट कॉन्फ़िगरेशन बदलना चाहते हैं तो इस चरणों का पालन करें:

  1. टर्मिनल टाइप कमांड खोलें

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. अब सुपर संपादक के रूप में नैनो एडिटर में runserver.py फ़ाइल खोलें

     $ sudo nano runserver.py
  3. 'default_port' वैरिएबल खोजें, फिर आप देखेंगे कि डिफ़ॉल्ट पोर्ट नंबर '8000' है। अब आप इसे अपनी इच्छानुसार बदल सकते हैं।

  4. अब फ़ाइल को बचाने के लिए "CTRL + X और Y का उपयोग करके फ़ाइल से बाहर निकलें"

नोट: अपने 2। संस्करण के साथ अजगर के प्रयोग करने योग्य संस्करण को बदलें


0
  1. अपने .bashrc में पर्यावरण चर बनाएं

    निर्यात RUNSERVER_PORT = 8010

  2. उपनाम बनाएँ

    उर्फ धावक = 'django-admin धावक $ RUNSERVER_PORT'

Zsh और virtualenvs रैपर का उपयोग कर Im। मैं हर प्रोजेक्ट के लिए स्क्रिप्ट और असाइन पोर्ट पोर्ट करने वाली परियोजनाओं में निर्यात करता हूं।

workon someproject
runserver

-2

यह एक पुरानी पोस्ट है, लेकिन उन लोगों के लिए जो रुचि रखते हैं:

यदि आप डिफ़ॉल्ट पोर्ट नंबर बदलना चाहते हैं तो जब आप "रनसर्वर" कमांड चलाते हैं तो आप अपने पसंदीदा पोर्ट के साथ शुरू करते हैं:

  1. अपने अजगर की स्थापना का पता लगाएं। (आप कई अजगर स्थापित कर सकते हैं और आपके पास अपना आभासी पर्यावरण संस्करण हो सकता है और साथ ही यह सुनिश्चित करें कि आप सही खोज लें)
  2. अजगर फ़ोल्डर के अंदर साइट-संकुल फ़ोल्डर का पता लगाएं। इसके अंदर आपको अपना django इंस्टॉलेशन मिलेगा
  3. Django फ़ोल्डर खोलें-> कोर -> प्रबंधन -> कमांड
  4. कमांड फ़ोल्डर के अंदर एक टेक्स्ट एडिटर के साथ runserver.py स्क्रिप्ट को खोलें
  5. DEFAULT_PORT फ़ील्ड ढूंढें। यह डिफ़ॉल्ट रूप से 8000 के बराबर है। आपको जो पसंद है उसे बदल दें DEFAULT_PORT = "8080"
  6. अपने सर्वर को फिर से शुरू करें: अजगर प्रबंधन ओरेकल को चलाएं और देखें कि यह आपके सेट पोर्ट नंबर का उपयोग करता है

यह अजगर 2.7 के साथ काम करता है लेकिन इसे अजगर के नए संस्करणों के साथ भी काम करना चाहिए। सौभाग्य


11
यह यहां का सबसे बुरा सुझाव है। IMHO, वितरण से किसी फ़ाइल को संपादित करना एक अच्छा विचार नहीं है और भ्रम की स्थिति पैदा करता है क्योंकि परिवर्तन VCS द्वारा ट्रैक नहीं किया जाता है और आसानी से ओवरराइट हो जाता है।
फुआर्मुरमेल

साइट संकुल पर Django मॉड्यूल को संपादित करने की अनुशंसा नहीं की गई है। इसे नए वर्जन द्वारा अपडेट किया जा सकता है। इसके अलावा यह सभी Django ऐप्स को प्रभावित करता है।
सथिन्दु कवनेथ

-3

मैं एक ही समस्या से जूझ रहा था और एक समाधान मिला। मुझे लगता है कि यह आपकी मदद कर सकता है। जब आप चलाते हैं python manage.py runserver, तो यह डिफ़ॉल्ट आईपी पते के रूप में 127.0.0.1 लेगा और डिफ़ॉल्ट पोर्ट नंबर के रूप में 8000 जो आपके पायथन वातावरण में कॉन्फ़िगर किया जा सकता है। अपने अजगर की सेटिंग में, <your python env>\Lib\site-packages\django\core\management\commands\runserver.py1. पर जाएं और सेट करें। default_port = '<your_port>'
2. इसे डिफ हैंडल और सेट के नीचे खोजें
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

अब यदि आप "अजगर प्रबंधन थिंकपैड रनसर" चलाते हैं, तो यह "0.0.0.0:" पर डिफ़ॉल्ट रूप से चलेगा

कोडिंग का आनंद लें .....


3
आश्रित पैकेजों के स्रोतों को संशोधित करना बुरा व्यवहार माना जाता है। अपडेट / पुनः इंस्टॉल करने पर परिवर्तन खो सकते हैं।
अरोगाचेव

यह सही है @arogachev, यह सिर्फ एक विकल्प है जिसके द्वारा आप डिफ़ॉल्ट पोर्ट और होस्ट बना सकते हैं। लेकिन यह वास्तव में निर्भर पैकेजों को संशोधित करने के लिए एक अच्छा अभ्यास नहीं है। जब आप कमांड प्रॉम्प्ट में अपना सर्वर चलाते हैं तो आप आईपी और पोर्ट सेट कर सकते हैं।
अमरेन्द्र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.