manage.py runserver

97

我正在从机器A运行python manage.py runserver,当我尝试在机器B中进行检查时。我输入的网址是http://A:8000/

我收到一个错误信息,如系统返回:(111)连接被拒绝


2
http://docs.djangoproject.com/en/dev/ref/django-admin/#runserver-port-or-address-port - Rafe Kettler
4
默认情况下它使用本地地址(127.0.0.1),不接受来自网络上其他计算机的连接。 127.x.x.x 被视为自己的网络,除非明确告知,否则计算机不会在它和其他接口之间进行路由。 因此,从另一个网络连接到它将无法找到打开的端口。 您需要运行 ./manage.py runserver A:8000 - Mike DeSimone
9个回答

176

您可以通过以下方式在网络中运行:

./manage.py runserver 0.0.0.0:8000

然后您就能够从网络中任何一台计算机访问您的服务器。只需在其他计算机的浏览器中键入http://192.168.0.1:8000,其中192.168.0.1是您服务器的IP地址......然后它已准备好了....

或者您也可以按以下步骤操作:

  1. 在命令行中的机器A上输入./manage.py runserver 0.0.0.0:8000
  2. 然后在机器B的浏览器中尝试输入http://A:8000
  3. 来一口啤酒。

源自Django文档


是的,这正是我一直在做的。我在我的Ubuntu虚拟机中运行Django,然后连接到我的Windows主机上,在Windows上进行测试。 - mpen
对我来说,这就像时钟一样准确。我也有Ubuntu系统。我的朋友使用Windows 7。首先尝试ping您的主机,并确保您正确地调整了虚拟机! - Pol
2
我使用这个版本的命令,以便我可以从我的 Parallels WinXP VM 在我的 Mac 上访问 Django 开发服务器。 - Carl G
通过这种方式,我可以连接iOS设备。 - Nidhin
这似乎很基础,但你关于IP的注释让我意识到在本地运行Django时应该使用http://localhost:8000而不是http://0.0.0.0:8000。 - ReemRashwan

24

你需要告诉 manage.py 绑定的本地 IP 地址端口号,例如 python manage.py runserver 192.168.23.12:8000。然后从另一台设备上使用相同的 IP 地址和端口号进行访问。你可以在这里的文档中了解更多信息。


1
谢谢您的回复,但我仍然收到一个错误,如下:错误:无法分配该IP地址。 - sreekanth
1
你可能有某些东西绑定了外部 IP 地址的端口。也许尝试另一个端口。同时,请确保没有防火墙阻止了连接。 - Jason Webb

6
我曾经遇到了同样的问题并找到了一种解决方案。我猜它能帮到你。当你运行命令“python manage.py runserver”时,默认的ip地址是127.0.0.1和端口号8000。127.0.0.1跟localhost是同一个东西,只能在本地访问。如果想要从跨域访问,则需要将其运行在系统IP或0.0.0.0上。0.0.0.0可以从网络中的任何来源访问。
如果想要使用自己的端口号而不是默认端口号,则需要设置系统的入站和出站策略。
要实现这一点,你需要通过命令“python manage.py runserver 0.0.0.0:<your port>”来运行服务器,如上所述。
或者,在你的python环境中设置一个默认的IP和端口号。关于如何设置,请参见我的答案:django change default runserver port 愉快编码。。。

4

如果有任何Windows用户遇到问题,我想分享我的经验。当运行命令 python manage.py runserver 0.0.0.0:8000 时,我可以使用localhost:8000查看url,但无法使用我的ip地址192.168.1.3:8000

我最终关闭了无线网卡的ipv6,并运行了命令ipconfig /renew。此后一切正常运行。


3
在Flask中,使用flask.ext.script,你可以这样做: python manage.py runserver -h 127.0.0.1 -p 8000

2

如果您正在使用CentOS7,为了允许访问8000端口,您需要在新的SSH连接中修改防火墙规则:

sudo firewall-cmd --zone=public --permanent --add-port=8000/tcp
sudo firewall-cmd --reload

1

我遇到了同样的问题,下面是我解决的方法:

首先,你需要知道你的IP地址。 在我的Windows PC上,我在命令提示符窗口中运行ipconfig命令,并选择我的IPV4地址。在我的情况下是192.168.0.13

第二步如上所述:运行服务器命令 runserver 192.168.0.13:8000

这对我起作用了。 导致出现错误的原因是我使用了网关地址而不是我的PC地址。


1
首先,更改你的目录:

cd your_project name

然后运行:
python manage.py runserver

0

好的,我刚刚看到这篇文章,虽然有点离题,但希望能解释清楚几件事情。IP 127.0.0.1 指向您的网络卡,因此您发送到该 IP 地址的任何流量都不会离开您的计算机。

例如,现代笔记本电脑中的网络卡在未连接 Wi-Fi 或有线网络时甚至不会为您提供该 IP,因此您需要至少连接才能激活该卡。

如果您需要在同一台机器上运行多个服务器,但想通过域名访问它们,则有几种选择:

  1. 编辑计算机的主机文件以定义域和它所指向的 IP
  2. 使用 DNS Alias 我几年前设置了一个 CNAME 记录,*.local.irishado.com 将指向 127.0.0.1

因此,例如这三个域将指向您的本地机器。

所有这些指向您的本地计算机,因此在python项目中,您需要编辑项目设置文件ALLOWED_HOSTS属性以保存它将接受的域

ALLOWED_HOSTS = ['site1.local.irishado.com']


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接