现象
在虚拟机环境中用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为你虚拟机中ifconfig
或ip a
命令返回的结果中对应的ip哦~
参考
- 这里django的官方教程有详细的解释。
更新
- 今天在看《Django 2 by example》这本书打算重新把django捡起来,就在虚拟机里面运行完
python manage.py runserver 0.0.0.0:8000
之后在宿主机上用chrome访问的时候却报了如下错误:
粗暴的解决办法很简单就是去settings.py里面找到ALLOWED_HOSTS这一项并设置为ALLOWED_HOSTS=['*'],当然这样做并不推荐,最佳实践方法请参考这里