我同时开发几个项目。
如果我运行runserver
两次,我得到这个错误:
System check identified no issues (0 silenced).
September 10, 2021 - 10:44:26
Django version 3.1.4, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Error: That port is already in use.
我知道我可以手动提供不同的端口,但是更自动的方法会更好。
如果不手动给每个项目一个端口,我该如何解决这个冲突?
我的笔记本电脑上有50多个系统,我不想手动给每个系统指定端口号。
您可以实现如下内容:
- 在
settings.py
中添加RUN_SERVER_PORT
RUN_SERVER_PORT = 8080
- 在
manage.py
中实现以下代码
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
from django.core.management.commands.runserver import Command as runserver
from django.conf import settings
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'accountant.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
runserver.default_port = settings.RUN_SERVER_PORT
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
工作量证明:
python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
September 19, 2021 - 12:47:59
Django version 3.2.6, using settings 'accountant.settings'
Starting development server at http://127.0.0.1:8080/
Quit the server with CONTROL-C.
您可以使用
RUN_SERVER_PORT
中的任何可用端口
您可以创建自己的管理命令runsever_foo
。
您可以从settings.py
或os.environ
中获取端口的默认值。
本文参考:https://stackoverflow.com/a/38319452/16936785
我建议修改manage.py
下的服务器端口为以下随机端口选择:
import random
from django.core.management.commands.runserver import Command
port_number = random.randint(8000, 8888)
Command.default_port = str(port_number)
把它放在你的.bashrc
.zshrc
或.bash_profile
取决于你的环境。
#!/usr/bin/env bash
function runserver()
{
local PORTNUM=8000
for (( ; ; )); do
nc -z 127.0.0.1 $PORTNUM
[ $? -ne 0 ] && break
PORTNUM=$(( $RANDOM % 1000 + 8000 ))
done
python manage.py runserver $PORTNUM $@
}
然后运行runserver
,它应该会打开一个端口在[8000, 9000)
范围内的测试服务器此函数使用netcat
来测试端口是否可用,您可能需要安装netcat
。
在不同的端口上运行Django
python manage.py runserver <your IP>:<port>
:python manage.py runserver 0.0.0.0:5000
或python manage.py runserver <port>
:python manage.py runserver 5000
自动化的创建一个类似django_5000
和django_7000
的bash脚本,根据所需的端口执行不同的命令。