djangoデフォルトのrunserverポートを変更する


128

manage.py runserverリッスンするデフォルトのポートを無関係に指定できるようにしたいconfig.inisys.argv内部manage.pyを解析して設定されたポートを挿入するよりも簡単な修正はありますか?

目標は、./manage.py runserver毎回アドレスとポートを指定せずに実行することですが、から引数を取りますconfig.ini


コマンドライン履歴からコマンドを実行すると、キーストロークがさらに少なくなります。たとえば、私にとっては「<ctrl-r> runs <enter>」であり、前回と同じコマンドが自動的に実行されるため、ポートなどが含まれます。
Jonathan Hartley、

回答:


175

以下を使用してbashスクリプトを作成します。

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

manage.pyと同じディレクトリにrunserverとして保存します

chmod +x runserver

そしてそれを実行します

./runserver

それか、カスタム管理コマンドの追加を考えています。
jonny

開発サーバーをプログラムで実行することはできないため、カスタムコマンドは、のようなものを使用してシェルを呼び出さない限り機能しませんcall。このソリューションが機能する場合は、解決済みとしてマークしてください。
パブロアルボルノス2014年

私は実際supervisorにこれを今使い始めました、それはそれを管理することをさらに簡単にします。:-)しかし、専用のrunserverスクリプトを作成する以外に、おそらくあなたのソリューションが最もクリーンなソリューションです。
ジョニー2014年

スーパーバイザは、開発環境の実行にはお勧めしません。特に、サーバー出力をターミナルに出力する利点が失われます。本当にスーパーバイザーを使いたいのなら、Gunicornのようなフル機能のWSGIサーバーでそれを使うことをお勧めします。開発サーバーを運用サーバーとして実行しないでください...
Pablo Albornoz

これは便利ですが、一度に複数のプロジェクトをジャグリングする場合にはあまり効果的ではありません。私は、各プロジェクトに使用するポートを指定する以下の回答を受け入れました。ちょうど私の意見です。

105

実際、開発用Djangoサーバーで(のみ)ポートを変更する最も簡単な方法は次のとおりです。

python manage.py runserver 7000

http://127.0.0.1:7000/で開発サーバーを実行する必要があります


1
この答えは、デフォルトのポートを変更するのではなく、ポートを変更することです。
フィジカル

42

Django 1.9以降、(Quentin Stafford-Fraserのソリューションに基づく)私が見つけた最も簡単なソリューションはmanage.pyrunserverコマンドを呼び出す前にデフォルトのポート番号を動的に変更する数行を追加することです:

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 2016

1
@PurpleDianeインデントが修正されました。
Flimm 2016

私のmanage.pyは実際にはそのように見えません
。Djangoは

6
現在(2.0.3以降)追加できるのはfrom django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080、manage.pyだけです。:あなたはまたしてリスニング・アドレスを変更することができます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は、モニカ

11

のサブクラスを作成しdjango.core.management.commands.runserver.Commanddefault_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は、runserverコマンドのpythonモジュールを配置する場所の説明から始まります。また、別のアプリがというコマンドを登録している場合もありますrunserver。コマンドの名前を変更して、コマンドが認識されるかどうかを確認してください。
Feuermurmel

1
に入れました<app_name>/management/commands/runserver.pyが、Djangoのオリジナルrunserverを使用しています。名前をに変更するとrun_server.py、認識されます。runserverリンク先のページに特別なものはありません。
フィジカル

重要なのはstaticfiles、あなたが提案したことを実行することです。したがって、指示に従うと、開発中の静的ファイルの提供が中断されます。からインポートするのが最適django.contrib.staticfiles.management.commandsです。
x-yuri

8

新しい「runserver」管理コマンドを作成しました。これは、標準のラッパーの薄いラッパーですが、デフォルトのポートを変更します。大まかに、次の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

私はここでパーティーに非常に遅れていますが、PyCharmのようなIDEを使用している場合は、[実行]メニューの[構成の編集]にオプションがあり([実行]> [構成の編集])、デフォルトのポートを指定できます。もちろん、これはPyCharmを使用してデバッグ/テストする場合にのみ関係します。


1

デフォルトの構成を変更する場合は、次の手順に従います。

  1. 端末タイプコマンドを開く

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. 今度は、nanoエディターでスーパーユーザーとしてrunserver.pyファイルを開きます

     $ sudo nano runserver.py
  3. 「default_port」変数を見つけると、デフォルトのポート番号が「8000」であることがわかります。これで、好きなように変更できます。

  4. 「CTRL + XおよびYでファイルを保存」を使用して、ファイルを終了して保存します。

注:<2/3> .xを使用可能なバージョンのpythonに置き換えます


0
  1. .bashrcに環境変数を作成する

    RUNSERVER_PORT = 8010をエクスポート

  2. エイリアスを作成

    エイリアスrunserver = 'django-admin runserver $ RUNSERVER_PORT'

私はzshとvirtualenvsラッパーを使用しています。私はプロジェクトにエクスポートをポストアクティブ化スクリプトとすべてのプロジェクトのポートに割り当てました。

workon someproject
runserver

-2

これは古い投稿ですが、興味がある人のために:

デフォルトのポート番号を変更して、「runserver」コマンドを実行するときに優先ポートで開始する場合は、次のようにします。

  1. Pythonのインストールを見つけます。(複数のpythonをインストールでき、仮想環境のバージョンも持つことができるので、正しいものを見つけてください)
  2. pythonフォルダー内で、site-packagesフォルダーを見つけます。その中にあなたのdjangoインストールが見つかります
  3. djangoフォルダを開く->コア->管理->コマンド
  4. コマンドフォルダー内で、runserver.pyスクリプトをテキストエディターで開きます。
  5. DEFAULT_PORTフィールドを見つけます。デフォルトでは8000です。好きなように変更してください DEFAULT_PORT = "8080"
  6. サーバーを再起動します:python manage.py runserverと設定したポート番号を使用していることを確認してください

Python 2.7で動作しますが、Pythonの新しいバージョンでも動作するはずです。幸運を


11
これは、ここでのすべての最悪の提案です。私見、ディストリビューションからファイルを編集することは決して良い考えではなく、変更はVCSによって追跡されず、簡単に上書きされるため混乱を招きます。
Feuermurmel 2017

サイトパッケージでDjangoモジュールを編集することはお勧めしません。新しいバージョンで更新できます。また、すべてのDjangoアプリに影響します。
Sathindu Kavneth

-3

私は同じ問題に苦労していて、1つの解決策を見つけました。それはあなたを助けることができると思います。を実行するとpython manage.py runserver、デフォルトのIPアドレスとして127.0.0.1が使用され、デフォルトのポート番号として8000が使用されます。これは、Python環境で構成できます。Python設定で、1に移動し<your python env>\Lib\site-packages\django\core\management\commands\runserver.pyて設定します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 runserver」を実行すると、デフォルトで「0.0.0.0」で実行されます。

コーディングを楽しむ.....


3
依存パッケージのソースを変更することは悪い習慣と考えられています。アップデート/再インストール時に変更が失われる可能性があります。
arogachev 2017

そうです@arogachev、それはあなたがデフォルトのポートとホストを作ることができる単なるオプションです。しかし、依存パッケージを変更することは、実際には良い習慣ではありません。コマンドプロンプトでサーバーを実行するときにも、IPとポートを設定できます。
アムレンドラ2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.