站点图标 AI技术聚合

使用 Django 保护您的 Streamlit 应用程序

使用 Django 保护您的 Streamlit 应用程序

围绕您的机器学习 Web 应用构建灵活的身份验证系统

Streamlit 是数据科学家将其工作转换为 Web 应用程序的绝佳工具。[0]

在之前的一篇文章中,我讨论了围绕 K-Means 聚类创建应用程序的基础知识。用户可以更改集群数量等参数并可视化组的变化。[0]

您可以阅读下面的帖子并从此 GitHub 存储库访问源代码。[0]

在这篇文章和未来的几篇文章中,我想分享一些令人兴奋的方法,我已经解决了有关 Stramlit 的一些具有挑战性的问题。这篇文章解释了如何围绕 Stramlit 应用构建身份验证系统。

Streamlit 的身份验证系统有什么问题?

在使用 Django 之前,让我先谈谈 Streamlit 的内置身份验证选项。[0]

Streamlit 还很年轻,而且还在不断进步。它有一种使用 secrets.toml 文件对应用程序进行身份验证的建议方法。[0]

您在 TOML 文件中指定应用程序的用户及其密码并将其上传到部署环境。然后在应用程序中,您放置一个代码片段以查找并匹配密码以进行身份​​验证。[0]

我看到这种方法的三个主要缺点。

首先,将密码存储在文件中是不安全的。任何拥有(或获得)部署环境访问权限的人也可以访问密码。

其次,没有密码散列。存储散列密码是一个好习惯。如果经过哈希处理,即使有人可以读取密码,它也将是原始密码的加扰版本。入侵者应该知道使用的散列算法和另一个秘密密钥来解码它。另一个密钥通常很难破解暴力破解方法,因为它是一个很长的字符串——通常大约 64 个字符。[0][1]

最后,我们需要一个界面来管理平台的用户。在 Streamlit 建议的方法中,如果新用户需要访问系统,开发人员应该将他的凭据添加到 TOML 文件中。

除了这三个之外,无法管理访问控制是我们需要复杂的身份验证系统的另一个原因。

Django 有一个默认的管理界面来管理用户。它有一种身份验证机制,可以通过密码散列将用户存储在数据库中。所以,让我们使用它。[0]

让我们为 Streamlit 构建一个 Django 身份验证器。

我将遵循我在本教程上一篇文章中使用的相同项目。您可以使用以下代码从 GitHub 存储库中克隆它。

git clone git@github.com:thuwarakeshm/Streamlit-Intro.git streamdj
cd streamdj
# This will create the following project files
.
├── quickstart.py
├── README.md
└── requirements.txt

另外,让我们创建一个虚拟环境并安装要求。

$ virtualenv env$ source env/bin/activate # On Linux
$ source env\Scripts\activate # on Windows
pip install -r requirements

现在让我们在文件夹中创建一个 Django 应用程序。

$ django-admin startproject config .# The project structure will look like this now
.
├── config
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── quickstart.py
├── README.md
└── requirements.txt

让我们继续创建一个超级用户来管理所有其他用户。

$ python manage.py migrate
$ python manage.py createsuperuser
# Follow the on-screen instructions to create the user

让我们使用 python manage.py runserver 启动服务器并通过 http://localhost:8000/admin/ 登录到管理门户。[0]

让我们还创建几个用户来测试我们的应用程序。单击用户旁边的小 + 按钮并添加一些。

现在,我们已经为用户做好了准备。下一步是利用 Django 身份验证框架让用户访问 Steramlit 应用程序的私有页面。

使用 Django 验证 Streamlit 应用程序。

Django 的 WSGI 应用程序实例应该在我们的 Stramlit 应用程序中运行才能正常工作。这是 Django 建立数据库连接和身份验证所必需的。

现在我们需要另一个函数来显示用户名和密码输入字段。我们可以通过将内容 wsgi.py 复制到 Streamlit 运行的快速入门文件中来实现。

该函数还将调用 Django 的身份验证函数。

我们现在需要调用此函数并仅在 Streamlit 应用程序返回 True 时继续执行其余部分。

if if check_password():   # Our regular Streamlit app.

这是 quickstart.py 文件的完整版本。

测试身份验证流程

我们的应用程序现在是安全的。我们需要启动 streamlit 应用程序。让我们试试看。

$ streamlit run quickstart.py

上面的命令应该启动服务器并在默认浏览器中打开应用程序。现在您将看到以下登录页面,而不是您的 Streamlit 应用程序。

您还可能会看到错误消息和空密码。您必须输入正确的用户名和密码组合才能登录并查看您的 streamlit 应用程序。

Final Thoughts

Streamlit 是数据科学家的绝佳解决方案。它允许围绕他们的机器学习模型创建 Web 应用程序,而无需担心 HTML、CSS、JavaScript 和其他 Web 开发复杂性。

但是这个工具还很年轻。因此其身份验证功能需要改进。我相信该工具背后的出色开发团队将很快构建它。

但是目前,为了安全地部署我们的 Streamlit 应用程序,我们可以从成熟的 Web 开发框架之一借用身份验证功能。

在这篇文章中,我们使用 Django 身份验证来保护 Streamlit 应用程序。它解决了 Streamlit 建议方法的一些关键缺失功能。 Django 将经过哈希处理的密码存储在数据库中。此外,我们还有一个 Web 界面来管理用户。

如果没有访问控制,这还不完整。但那是为了以后的帖子。

感谢阅读,朋友!在 LinkedIn、Twitter 和 Medium 上向我问好。看来你和我有很多共同的兴趣。[0][1][2]

还不是中型会员?请使用此链接成为会员,因为我不会为您支付额外费用,因为我推荐您赚取少量佣金。[0]

文章出处登录后可见!

已经登录?立即刷新
退出移动版