Django自带的runserver实现远程访问

最近在Ubuntu服务器上创建了一个Django项目,想实现远程访问:
新创建一个名为my_site的Django项目,目录结构如下:

项目结构
../my_site/
├── db.sqlite3
├── manage.py
└── my_site
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-36.pyc
    │   ├── settings.cpython-36.pyc
    │   ├── urls.cpython-36.pyc
    │   └── wsgi.cpython-36.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py
查看IP

首先得获取服务器公网IP,留着后面有用
比如本机的公网IP是:48.108.238.27;内网IP是:173.18.50.48

修改配置文件

如果是在另一台电脑上web访问要用 python manage.py ip:port (注意port不要冲突)的形式;
在项目中找到my_site(项目名称)目录下面的settings.py文件,在ALLOWED_HOSTS列表中添加以下内容

root@onefine:/home/admin/PythonProject/test/my_site# vim my_site/settings.py
# 省略...
ALLOWED_HOSTS = ['48.108.238.27','173.18.50.48','localhost','0.0.0.0:8000','127.0.0.1']
#省略...

这里的'48.108.238.27'是公网IP,'173.18.50.48'是内网IP(这个可以不要)
保存之后退出,最好cat一下确认。
注意ALLOWED_HOSTS 列表也可以改为ALLOWED_HOSTS = ['*']但是最好不要这样做。

启动测试

启动时使用python3 manage.py runserver 0.0.0.0:80监听所有IP,端口为80:

root@onefine:/home/admin/PythonProject/test/my_site# python3 manage.py runserver 0.0.0.0:80
Performing system checks...

System check identified no issues (0 silenced).

You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

January 17, 2019 - 07:31:45
Django version 2.1.5, using settings 'my_site.settings'
Starting development server at http://0.0.0.0:80/
Quit the server with CONTROL-C.

打开浏览器输入公网IP(这里是48.108.238.27,80端口可省略),或者输入IP所绑定的域名就可以看到下面的调试页面。

Django:runserver实现远程访问

可以看到终端中有响应:

----------------------------------------
Not Found: /favicon.ico
[17/Jan/2019 07:38:12] "GET /favicon.ico HTTP/1.1" 404 1972
[17/Jan/2019 07:38:13] "GET / HTTP/1.1" 200 16348

大功告成。