如何使用Ngrok将Django演示应用程序暴露到互联网?

让我们学习如何将Django演示应用程序暴露给互联网。即使不在托管服务上部署,也可以做到这一点。

配置一个临时的部署环境来展示Django应用程序的演示是糟糕的。尤其是如果你只需要一个URL来展示给客户或团队成员几分钟。

最好的选择是使用一个工具来暴露你当前的本地服务器。没错!全世界的人都可以看到你本地主机上正在发生的事情。

为此,我们将使用Ngrok。这个工具将允许我们根据我们计算机的本地端口创建公共URL。所有这一切都得益于Tunnels的魔法。

在开始之前,本教程中的所有代码都将在此Github repository中提供。

先决条件

建议您了解所有这些基本知识。虽然您可能可以在没有进一步问题的情况下跟随本教程。

创建Django应用程序

为了创建一个逐步教程,我将解释创建Django项目的过程。如果您已经有一个,可以跳过此部分。

虚拟环境

首先,让我们创建一个Python virtual environment

  • 打开系统终端(或shell)。
  • 如果您发现打开系统终端太复杂,尝试使用code editor的内置终端。

  • 点击终端>新建终端,屏幕底部应该出现一个shell。
  • 键入以下命令使用内置的Python工具创建一个虚拟环境。
python -m venv .venv

它基本上表示:

嘿,Python,使用名称为.venv 的虚拟环境(-m venv)命令创建

  • 现在,如果您列出当前目录的文件,您应该看到一个.venv文件夹。
$ ls -l
drwxr-xr-x    - daniel 30 abr 23:12 .venv
# 其他文件 ...
  • 要激活虚拟环境,我们调用source命令。
source .venv/bin/activate
平台 Shell 激活虚拟环境的命令
POSIX bash/zsh $ source /bin/activate
fish $ source /bin/activate.fish
csh/tcsh $ source /bin/activate.csh
PowerShell Core $ /bin/Activate.ps1
Windows cmd.exe C:> Scriptsactivate.bat
PowerShell PS C:> ScriptsActivate.ps1

现在,如果您运行了正确的命令,您的shell应该显示虚拟环境的名称。

$ source .venv/bin/activate.fish

(.venv) $ 

安装Django

激活虚拟环境后,您现在可以安装任何您想要的Django版本。在这种情况下,安装最新版本是一个不错的选择。

现在是时候创建您要公开的Django应用程序的基本项目结构了。

$ pip install django
正在收集 Django
使用缓存的 Django-3.2-py3-none-any.whl (7.9 MB)
正在收集 pytz
使用缓存的 pytz-2021.1-py2.py3-none-any.whl (510 kB)
正在收集 asgiref=3.3.2
使用缓存的 asgiref-3.3.4-py3-none-any.whl (22 kB)
正在收集 sqlparse>=0.2.2
使用缓存的 sqlparse-0.4.1-py3-none-any.whl (42 kB)
正在安装已收集的软件包:pytz、asgiref、sqlparse、django
成功安装了 asgiref-3.3.4 django-3.2 pytz-2021.1 sqlparse-0.4.1

现在是时候创建您要公开的Django应用程序的基本项目结构了。

$ django-admin startproject mytestingproject

这将创建一个名为mytestingproject的Django项目。创建完成后,您将要进入项目结构所在的目录。因此,让我们进入该目录并运行Django服务器。

# 进入项目目录
(.venv)$ cd mytestingproject/

# 列出项目中的文件
(.venv) $ ls
mytestingproject  manage.py 

现在您已经进入了该目录,让我们运行Django服务器以查看效果。

 (.venv) $python manage.py runserver
正在使用 StatReloader 监视文件更改
正在进行系统检查...

未发现系统问题 (0 个静音问题)。

您有 18 个未应用的迁移。在应用这些迁移之前,您的项目可能无法正常工作: admin、auth、contenttypes、sessions。
运行 'python manage.py migrate' 执行它们。
2021 年 5 月 1 日 - 04:34:25
Django 版本 3.2,使用设置 'mytestingproject.settings'
在 http://127.0.0.1:8000/ 启动开发服务器
要退出,请按 CONTROL-C。

基本上,Django告诉我们本地服务器正在我们的本地主机(127.0.0.1始终指向本地主机)上以默认端口8000运行。

不需要担心错误消息。首先,我们来检查本地服务器是否正常工作。为此,请在您的Web浏览器中粘贴此网址:

http://localhost:8000/
#您注意到localhost和127.0.0.1是相同的吗?

如果一切正常,您应该看到一个漂亮的Django模板。

关于我们的Django安装就是这些。

现在让我们开始公开这个Django项目。如果您正在开发一个更复杂的项目,下面的公开Django应用程序的方法也适用。

使用Ngrok公开Django应用程序

正如我之前所说,Ngrok是一种工具,可以让我们将本地服务器发布到互联网上。因此,首先要从官方网站上下载 Download Ngrok

安装完成后,让我们继续执行所需的命令。

打开另一个终端,保持当前运行Django服务器的终端,并输入以下命令。

$  ngrok help
名称:
   ngrok - 将本地端口隧道连接到公共URL并检查流量

更多命令 ....

这将让您快速查看Ngrok提供的可用命令,并确保安装过程正确无误。

为了创建一个可以让他人访问我们服务器的URL,运行以下命令。

    $ ngrok http 8000 
# 为端口8000的Web服务器创建安全的公共URL

我们正在运行http参数,创建一个将连接到我们本地主机的端口8000的URL。

下面是您可能会得到的结果。

ngrok by @inconshreveable (Ctrl+C to quit)

会话状态 在线
会话过期时间 1小时,59分钟
更新 可用更新(版本2.3.39,按Ctrl-U进行更新)
版本 2.3.35
地区 美国(us)
Web界面 http://127.0.0.1:4040
转发 http://cac2165aa7f8.ngrok.io -> http://localhost:8000
转发 https://cac2165aa7f8.ngrok.io -> http://localhost:8000

连接 ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00

正如它所说的,Ngrok正在将那个奇怪而丑陋的URL转发到我们的localhost。但是,当您使用Ngrok提供的URL在浏览器中访问时,魔法就会发生。

更改settings.py

哇,刚刚发生了什么 😱?

似乎Django由于DisallowedHost设置而抛出了一个错误。如果您检查正在运行Django服务器的Shell和具有Ngrok会话的Shell,您将获得一些调试消息。

# Django消息
Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'。您可能需要将'cac2165aa7f8.ngrok.io'添加到ALLOWED_HOSTS。
Bad Request: /
[01/May/2021 05:07:46] "GET / HTTP/1.1" 400 65196
Invalid HTTP_HOST header: 'cac2165aa7f8.ngrok.io'。您可能需要将'cac2165aa7f8.ngrok.io'添加到ALLOWED_HOSTS。

# Ngrok消息
HTTP请求                                                            
-------------                                                            
                                                                         
GET /favicon.ico               400 Bad Request                           
GET /                          400 Bad Request                           
                                              

正如Django告诉我们的,我们必须将我们连接的域添加到ALLOWED_HOSTS配置变量中。但是我们有一个问题,即域名太长且令人困惑。

因此,让我们稍微更改一下Django设置,以解决此错误。打开位于项目文件夹中的settings.py文件。

# mytestingproject/settings.py

# 第28行

# 从以下更改为
ALLOWED_HOSTS = []

# 至

ALLOWED_HOSTS = ["*"]

如果您了解一些正则表达式,您可以理解我们正在设置一个通配符,其中允许所有主机。

现在重新加载网站,然后查看结果。

现在一切都运行得很完美!如果您开始为该项目创建应用程序并设置URL和视图,所有内容都将反映在该公共URL上。

注意:请不要忘记在生产环境中更改ALLOWED_HOSTS,否则会产生严重的安全漏洞。

结论

在本教程中,您学习了如何为您的Django项目创建演示URL,而无需部署它。

您练习了如何启动Django项目并使用Django中的settings.py文件。

最后,您学会了如何使用Ngrok,以及如何使用它公开任何本地服务器。

接下来,探索一些popular Python frameworks to build API

类似文章