如何使用 Ngrok 将 Django 演示应用程序公开到 Internet?
已发表: 2021-05-02让我们学习如何将 Django 演示应用程序公开到互联网。 也就是说,无需将其部署在托管服务中。
配置一个临时部署环境只是为了展示你的 Django 应用程序的演示是很糟糕的。 更重要的是,如果您只需要几分钟的 URL,就可以将其显示给客户或团队成员。
最好的选择是使用工具来公开您当前的本地服务器。 确切地! 世界各地的人们将能够看到您的本地主机上发生的事情。
为此,我们将使用 Ngrok。 此工具将允许我们根据计算机的本地端口创建公共 URL。 所有这一切都归功于隧道的魔力。
在开始本教程中的所有代码之前,将在此 Github 存储库中可用。
先决条件
- 系统中安装了 Python 3.6+
- 命令行界面的一点经验
- Django基础知识
- 理解 Django-admin 和 manage.py 脚本
建议您了解所有这些基本知识。 尽管很可能您可以按照本教程进行操作,而不会出现其他问题。
创建 Django 应用
为了创建分步教程,我将解释创建 Django 项目的过程。 如果你已经有了,你可以跳过这一节。
虚拟环境
首先,让我们创建一个 Python 虚拟环境。
- 所以打开你的系统终端(或 shell)。
- 如果您发现打开系统终端太复杂,请尝试使用代码编辑器的内置终端。

- 单击Terminal>New terminal ,屏幕底部应该会出现一个 shell。
- 键入以下命令以使用内置 Python 工具创建虚拟环境。
python -m venv .venv它基本上意味着:
嘿Python中,创建一个虚拟环境(-m VENV)命令.venv名
- 现在,如果您列出当前目录的文件,您应该会看到一个.venv文件夹。
$ ls -l drwxr-xr-x - daniel 30 abr 23:12 .venv # Other files ...- 为了激活虚拟环境,我们调用source命令。
source .venv/bin/activate- 如果您发现任何问题,请参考从python官方文档中提取的下表。
| 平台 | 壳 | 激活虚拟环境的命令 |
|---|---|---|
| POSIX | bash/zsh | $ source <venv>/bin/activate |
| 鱼 | $ source <venv>/bin/activate.fish | |
| csh/tcsh | $ source <venv>/bin/activate.csh | |
| PowerShell 核心 | $ <venv>/bin/Activate.ps1 | |
| 视窗 | 命令行工具 | C:\> <venv>\Scripts\activate.bat |
| 电源外壳 | PS C:\> <venv>\Scripts\Activate.ps1 |
现在,如果您运行了正确的命令,您的 shell 中应该包含虚拟环境的名称。
$ source .venv/bin/activate.fish (.venv) $安装 Django
激活您的虚拟环境后,现在您可以安装您想要的任何 Django 版本。 在这种情况下,安装最新版本是一个不错的选择。
$ pip install django Collecting django Using cached Django-3.2-py3-none-any.whl (7.9 MB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Collecting asgiref<4,>=3.3.2 Using cached asgiref-3.3.4-py3-none-any.whl (22 kB) Collecting sqlparse>=0.2.2 Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB) Installing collected packages: pytz, asgiref, sqlparse, django Successfully installed asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1现在是时候创建要公开的 Django 应用程序的基本项目结构了。
$ django-admin startproject mytestingproject这将创建一个名为mytestingproject的 Django 项目。 创建它后,我们希望您需要进入项目结构所在的目录。 所以让我们cd进入它并运行 Django 服务器。
# Enter to the project directory (.venv)$ cd mytestingproject/ # Listing the files inside the project (.venv) $ ls mytestingproject manage.py既然你已经进去了,让我们运行 Django 服务器来看看它的样子。
(.venv) $python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 18 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. May 01, 2021 - 04:34:25 Django version 3.2, using settings 'mytestingproject.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.基本上,Django 告诉我们本地服务器正在我们的本地服务器上运行(127.0.0.1 总是指向它),在默认端口 8000 上。

不要担心错误消息。 首先,让我们检查一下本地服务器上一切正常。 为此,请转到您的网络浏览器并粘贴以下方向:
http://localhost:8000/ # Do you note that localhost and 127.0.0.1 are the same?如果一切正常,您应该会看到一个漂亮的 Django 模板。

这就是我们的 Django 安装。
现在让我们开始公开这个 Django 项目。 如果您正在处理更复杂的项目,以下公开 Django 应用程序的方法也适用。
使用 Ngrok 公开 Django 应用程序
正如我之前所说,Ngrok 是让我们在互联网上登陆本地服务器的工具之一。 所以首先从官方网站下载 Ngrok。
安装完成后,让我们继续执行所需的命令。
打开另一个 shell,保持 Django 服务器当前正在运行的终端,然后输入。
$ ngrok help NAME: ngrok - tunnel local ports to public URLs and inspect traffic More commands ....这将让您快速查看 Ngrok 提供的可用命令,并确保安装过程正确进行。
为了创建一个人们可以访问我们服务器的 URL,让我们运行。
$ ngrok http 8000 # secure public URL for port 8000 web server我们正在运行http参数,以创建一个将连接到我们本地主机的端口8000的 URL。
这是您可能会得到的结果。
ngrok by @inconshreveable (Ctrl+C to quit) Session Status online Session Expires 1 hour, 59 minutes Update update available (version 2.3.39, Ctrl-U to update) Version 2.3.35 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://cac2165aa7f8.ngrok.io -> http://localhost:8000 Forwarding https://cac2165aa7f8.ngrok.io -> http://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0.00 0.00 正如它所说,Ngrok 正在将那个奇怪而丑陋的 URL 转发到我们的localhost 。 但神奇的事情发生了,当你用 Ngrok 给你的 URL 访问浏览器时。

更改设置.py
哇,刚刚发生了什么?
由于DisallowedHost设置,Django 似乎抛出错误。 如果您检查运行 Django 服务器的 shell,以及带有 Ngrok 会话的 shell,您将收到一些调试消息。
# Django messages Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. Bad Request: / [01/May/2021 05:07:46] "GET / HTTP/1.1" 400 65196 Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'. You may need to add 'cac2165aa7f8.ngrok.io' to ALLOWED_HOSTS. # Ngrok messages HTTP Requests ------------- GET /favicon.ico 400 Bad Request GET / 400 Bad Request正如 Django 告诉我们的,我们必须将要连接的域添加到 ALLOWED_HOSTS 配置变量。 但是我们有一个问题,就是域名太大,容易混淆。
因此,让我们稍微更改一下 Django 设置,以解决此错误。 打开位于项目文件夹中的settings.py文件。
# mytestingproject/settings.py # Line 28 # Change from ALLOWED_HOSTS = [] # To ALLOWED_HOSTS = ["*"]如果您知道一些正则表达式,您就会明白我们正在设置一个通配符,其中允许所有主机。
现在重新加载站点,然后查看结果。

现在一切正常! 如果您开始为项目创建应用程序并设置 URL 和视图,所有这些都将反映在该公共 URL 上。
注意:不要忘记在生产中更改ALLOWED_HOSTS ,因为它会产生一个巨大的安全漏洞。
结论
在本教程中,您学习了如何为 Django 项目创建演示 URL,而无需部署它。
您练习了如何启动 Django 项目并使用 Django 中的settings.py文件。
最后,您学习了如何使用 Ngrok,以及如何使用它公开任何本地服务器。
接下来,探索一些流行的 Python 框架来构建 API。
