在Azure上实现Python应用和数据现代化第1部分:简介

目录

要求

准备PostgreSQL数据库

为PostgreSQL配置应用程序

在本地运行真实世界的应用程序

使用示例数据填充应用程序

奖励:与后端一起运行前端

下一步


在这里,我们学习如何下载和运行基于PythonDjango REST框架(DRF)SQLite数据库的RealWorld示例应用程序,以提供后端REST API。我们准备好需求,然后在本地安装和运行PostgreSQL数据库。

许多Python开发团队知道他们需要对其应用程序进行现代化改造,但不确定从哪里开始、如何做或使用什么工具。

这个由六部分组成的文章系列将演示如何在Azure上实现Python应用程序和数据的现代化。我们将从以Django RealWorld Example App为代表的传统单体Python应用程序开始。

Django是一个成熟的、功能齐全的Python应用程序Web框架。然而,对于较小的项目来说,Django可能有点过分了,因为它鼓励开发大型的单体应用程序。开发人员经常考虑其他用于微服务的Python Web框架。

假设您的组织希望在不放弃您已经投入应用程序的工作的情况下逐渐远离Django。在这种情况下,Azure可以帮助顺利过渡到云原生微服务。

第一篇文章将在本地运行后端Django RealWorld应用程序,并进行一些小的更改以将SQLite替换为PostgreSQL数据库。您可以按照本文中的步骤运行您的应用程序,或下载并打开此GitHub存储库文件夹以获取最终项目。您应该了解PythonDjango才能继续学习。

在本系列文章的后面,我们将展示如何通过将应用程序及其数据迁移到Azure来对其进行现代化改造。然后,我们将通过云原生服务逐步扩展应用程序的功能,并展示如何将应用程序的数据迁移到Cosmos DB

现在,让我们从准备我们的旧应用程序迁移到云开始。

要求

在安装和测试应用程序之前,请确保您满足应用程序运行的所有要求:

准备PostgreSQL数据库

在本节中,我们将使用示例数据填充应用程序,以便我们在下一篇文章中拥有要迁移的数据。我们还将对默认的RealWorld应用程序进行一项小改动:使用PostgreSQL而不是SQLitePostgreSQL更能代表开发团队希望在云中实现现代化的单体应用程序。

首先,确保您可以从终端运行PostgreSQL命令行界面(CLI)。因此,将\bin\lib文件夹添加到系统的路径中。例如,在我的Windows机器中,我必须将以下文件夹添加到Path环境变量中:

C:\Program Files\PostgreSQL\14\bin
C:\Program Files\PostgreSQL\14\lib

现在,打开终端并键入以下命令以连接到PostgreSQL CLI,然后提供您在首次安装PostgreSQL时定义的主密码:

postgres=# create database conduit_db;
CREATE DATABASE

接下来,为Conduit应用程序新建一个conduit_db database

postgres=# create database conduit_db;
CREATE DATABASE

最后,创建一个新的管道用户来连接到您的conduit_db数据库:

postgres=# create user conduit_user with password '123456';
CREATE ROLE

PostgreSQL配置应用程序

现在您需要修改\conduit\settings.py文件中的DATABASES常量以指向PostgreSQL而不是SQLite

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'conduit_db',
        'USER': 'conduit_user',
        'PASSWORD': '<<YOUR-MASTER-PASSWORD>>',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

然后,打开requirements.txt文件并为psycopg2添加以下依赖项,psycopg2Python编程语言的PostgreSQL数据库适配器:

psycopg2==2.7.5
psycopg2-binary==2.7.5

在本地运行真实世界的应用程序

在运行应用程序之前,让我们创建一个与系统目录隔离的虚拟环境。这样,我们就可以为我们的新项目独立安装一组Python包。

首先,执行venv命令创建一个专用的目标目录:

> python -m venv ./venv

然后,激活venv环境:

> ./venv/Scripts/activate

接下来,在虚拟环境中安装所有要求:

(venv) > pip install -r requirements.txt

我们现在有PostgreSQL数据库,但我们仍然没有数据库模式。因此,执行migrate命令来创建PostgreSQL数据库和您的应用程序所需的所有模式:

> python manage.py migrate

最后,通过执行runserver命令运行应用程序:

> python manage.py runserver

Django version 1.10.5, using settings 'conduit.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

在浏览器中打开http://127.0.0.1:8000/api以确认后端工作正常:

使用示例数据填充应用程序

不幸的是,当前代码给出了无效格式字符串错误,阻止您登录。要修复此错误,请打开models.py文件并替换此代码块:

token = jwt.encode({
    'id': self.pk,
    'exp': int(dt.strftime('%s'))
}, settings.SECRET_KEY, algorithm='HS256')

有了这个:

token = jwt.encode({
    'id': self.pk,
    'exp': dt.utcfromtimestamp(dt.timestamp())
}, settings.SECRET_KEY, algorithm='HS256')

现在,我们可以通过向API发送HTTP请求来填充我们的PostgreSQL博客数据库,以创建用户、文章和评论。幸运的是,我们可以使用Postman发送一组HTTP请求,从而使填充过程自动化。

首先,下载Conduit.postman_collection.json并将其保存到本地文件系统。然后打开Postman,点击File菜单,点击Import子菜单,然后点击Upload File。选择本地存储库文件夹中的Conduit.postman_collection.json文件,然后单击Import

接下来,单击右上角的眼睛图标(环境快速查看),然后单击添加新环境

现在,将环境命名为“Conduit”。然后,为环境提供以下变量和初始值:

变量

初始值

APIURL

http://127.0.0.1:8000/api

用户名

alice_smith

电子邮件

alice@smith.com

密码

1234!@#$

接下来,单击Save以保存并关闭Conduit环境。

现在,单击右上角的No Environment字段并将其更改为“Conduit”环境。

在左侧面板上,选择Conduit集合。单击右箭头,然后单击运行

一个新窗口现在显示Postman Collection Runner。在左侧面板的底部,单击Run Conduit按钮。

现在,回到PostgreSQL CLI终端。使用以下命令连接到管道数据库数据库:

> psql -U postgres -h localhost conduit_db

接下来,键入SQL命令以从您刚刚创建的文章中获取IDslug和标题:

conduit_db=# select id, slug, title from articles_article;

结果应与此匹配:

id |                slug                 |            title
----+-------------------------------------+------------------------------
  1 | welcome-to-realworld-project-dgroov | Welcome to RealWorld project
  2 | explore-implementations-h9h4zn      | Explore implementations
  3 | create-a-new-implementation-ukwcnm  | Create a new implementation
(3 rows)

现在,键入SQL命令以从我们刚刚插入的注释中获取ID和正文:

conduit_db=# select id, body from articles_comment;

最后,您应该有以下结果:

id |                                                                                                         body                                                                                            
----+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1 | While most 'todo' demos provide an excellent cursory glance at a framework's capabilities, they typically don't convey the knowledge & perspective required to actually build real applications with it.  2 | RealWorld solves this by allowing you to choose any frontend (React, Angular, & more) and any backend (Node, Django, & more) and see how they power a real-world, beautifully designed full-stack app called Conduit.
  3 | There are 3 categories: Frontend, Backend and FullStack
  4 | Before starting a new implementation, please check if there is any work in progress for the stack you want to work on.
  5 | If someone else has started working on an implementation, consider jumping in and helping them! by contacting the author.
(5 rows)

奖励:与后端一起运行前端

本部分不是强制性的,但如果您对完整的Conduit应用程序的外观感到好奇,那么它是值得的。这里的想法是与我们的Django后端应用程序并行运行一个前端Web应用程序,以便前端可以使用API

首先,打开另一个Visual Studio Code实例。然后,克隆或下载vue-realworld-example-app存储库并按照该页面上的说明启动并运行项目。

现在,我们需要修改后端应用程序以供前端使用。前端应用程序将在http://localhost:8080运行,因此我们需要允许两个应用程序之间的跨域通信。

因此,在Django应用程序中打开settings.py文件并添加localhost:8080CORS_ORIGIN_WHITELIST常量中:

CORS_ORIGIN_WHITELIST = (
    '0.0.0.0:4000',
    'localhost:4000',
    'localhost:8080'
)

接下来,使用以下命令重新运行Django应用程序:

> python manage.py runserver

然后,切换到另一个VS Code实例来运行Vue前端应用程序:

> npm run serve

新的前端应用程序现在应该在http://localhost:8080运行。

如屏幕截图所示,我们使用Postman填充的数据现在可见,并且前端应用程序与我们的DjangoPostgreSQL后端项目无缝协作。

下一步

到目前为止,我们已经建立了一个后端项目,作为我们端到端现代化系列的起点。然后,我们使用Postman测试并使用初始样本数据填充API

本系列旨在将应用程序及其当前数据迁移到Azure,将其功能迁移到云原生服务,并将数据移植到Cosmos DB。我们的下一篇文章演示了如何设置Azure PostgreSQL数据库,将应用程序的数据迁移到Azure,并确保应用程序仍然有效。最后,我们将展示应用程序在连接到Azure Postgres数据库而不是本地数据库时在本地运行。

继续第二篇了解如何将数据迁移到云端​​​​​​​

若要详细了解Visual Studio Code以将容器映像从容器注册表部署到Azure应用服务,请查看我们的教程,使用Visual Studio Code将Docker容器部署到Azure应用服务

https://www.codeproject.com/Articles/5326410/Modernizing-Python-Apps-and-Data-on-Azure-Part-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值