现象

在虚拟机环境中用pip命令装完django的你是不是急着用python manage.py runserver来启动django 的开发服务器想看一下你写的Hello world!是否成功了,在命令运行完看到了下面的提示后:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

December 24, 2018 - 15:50:53
Django version 2.1, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

你复制http://127.0.0.1:8000/这个网址并粘贴到浏览器里面想看一下效果,可是这时你却失望的发现 浏览器提示你这个页面无法访问。

原因

原因很简单,你用VMware也好还是virtualbox和vagrant创建的虚拟环境是与宿主机在网络上相互隔离的,python manage.py runserver启动的命令默认只监听你虚拟机环境中本地网卡的网络请求。

解决

解决办法也很简单,在你上面执行的命令python manage.py runserver后面再加上你用ifconfig命令获取到的你的虚拟机的ip以及任意的一个大于1024的端口,也即是比如说python manage.py runserver 192.168.2.8:8000,如果你懒得 获取虚拟机的ip地址,最简单的是直接用0.0.0.0:8000,也即是python manage.py runserver 0.0.0.0:8000,这样你不仅在宿主机本身可以访问到你的django开发服务器,甚至是局域网任意的一台电脑都能访问到,怎么样是不是很爽! Tips: 你在宿主机要想访问你的django页面的话,访问ip为你虚拟机中ifconfigip a命令返回的结果中对应的ip哦~

参考

  • 这里django的官方教程有详细的解释。

更新

  • 今天在看《Django 2 by example》这本书打算重新把django捡起来,就在虚拟机里面运行完python manage.py runserver 0.0.0.0:8000之后在宿主机上用chrome访问的时候却报了如下错误: 如何访问运行在虚拟机里面的Django开发服务器 粗暴的解决办法很简单就是去settings.py里面找到ALLOWED_HOSTS这一项并设置为ALLOWED_HOSTS=[’*’],当然这样做并不推荐,最佳实践方法请参考这里