在Azure上实现Python应用和数据现代化第1部分:简介
目录
要求
准备PostgreSQL数据库
为PostgreSQL配置应用程序
在本地运行真实世界的应用程序
使用示例数据填充应用程序
奖励:与后端一起运行前端
下一步
在这里,我们学习如何下载和运行基于Python、Django 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存储库文件夹以获取最终项目。您应该了解Python和Django才能继续学习。
在本系列文章的后面,我们将展示如何通过将应用程序及其数据迁移到Azure来对其进行现代化改造。然后,我们将通过云原生服务逐步扩展应用程序的功能,并展示如何将应用程序的数据迁移到Cosmos DB。
现在,让我们从准备我们的旧应用程序迁移到云开始。
要求
在安装和测试应用程序之前,请确保您满足应用程序运行的所有要求:
- 下载并安装Visual Studio Code。
- 下载并安装VS Code Python扩展。
- 从Real World Example存储库中克隆或下载基于SQLite的原始后端代码。
- 按照安装说明在本地开发机器上设置Django后端应用程序。
- 下载并安装PostgreSQL以供以后使用,而不是SQLite。
- 下载并安装Postman。
准备PostgreSQL数据库
在本节中,我们将使用示例数据填充应用程序,以便我们在下一篇文章中拥有要迁移的数据。我们还将对默认的RealWorld应用程序进行一项小改动:使用PostgreSQL而不是SQLite。PostgreSQL更能代表开发团队希望在云中实现现代化的单体应用程序。
首先,确保您可以从终端运行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添加以下依赖项,psycopg2是Python编程语言的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 runserverDjango 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命令以从您刚刚创建的文章中获取ID、slug和标题:
conduit_db=# select id, slug, title from articles_article;
结果应与此匹配:
id | slug | title
----+-------------------------------------+------------------------------1 | welcome-to-realworld-project-dgroov | Welcome to RealWorld project2 | explore-implementations-h9h4zn | Explore implementations3 | 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 FullStack4 | 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:8080到CORS_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填充的数据现在可见,并且前端应用程序与我们的Django和PostgreSQL后端项目无缝协作。
下一步
到目前为止,我们已经建立了一个后端项目,作为我们端到端现代化系列的起点。然后,我们使用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
在Azure上实现Python应用和数据现代化第1部分:简介相关推荐
- 如何利用.NETCore向Azure EventHubs准实时批量发送数据?
最近在做一个基于Azure云的物联网分析项目:.netcore采集程序向Azure事件中心(EventHubs)发送数据,通过Azure EventHubs Capture转储到Azure BlogS ...
- 学习Python:做数据科学还是网站开发?
本文的英文原文地址是:Python for Data Science vs Python for Web Development 译者:EarlGrey@codingpy 译者一开始在Python日报 ...
- arcgis怎么运行python_在arcgis上用python脚本(arcpy)做数据批处理
arcgis软件是测绘地理信息行业空间数据处理与数据分析比较普及的一套软件系统,具有良好的扩展功能,其提供的基于python的开发包arcpy为数据的批处理提供了很好的基础.本文就是介绍在arcgis ...
- 在树莓派上使用 PowerShell 调用 Azure 上的 .NET Core API 获取疫情数据
点击上方蓝字关注"汪宇杰博客" 导语 最近因为疫情被关在家里,做了个无聊成就:我们将在树莓派上用 PowerShell 调用 Azure 上的一个 .NET Core 写的 API ...
- python做excel数据条件_懂点EXCEL就行!教你利用Python做数据筛选(上)
前言 Python的数据清洗功能有多厉害,相信不用我说大家都知道了,寥寥几行代码便可以把一份杂乱无章的表格给处理的干干净净.但是python也是不容易入门的,毕竟编程语言要理解和精通也是要花不少功夫的 ...
- 树莓派3B上用Python编程获取TSL2561光传感器数据
在树莓派3B上用Python编程,通过I2C协议,利用TSL2561光照强度传感器获取环境光强 嵌入式萌新一枚,文章有解释不清或者错误的地方希望大佬能在评论区指正,感激不尽! 大概原理: 通过TSL2 ...
- python分析人口出生率代码_国家统计局居然也能用的上Python?人口数据Python脚本了解一下?...
原标题:国家统计局居然也能用的上Python?人口数据Python脚本了解一下? 通过采集国家统计局"国家数据"网站中提供的中国历年人口数据,并对数据进行可视化的探索,发现了一些有 ...
- python 网页上显示数据_怎么用python将excel数据写入网页中,python 网页上excel表格数据分析...
用python读取excel,怎样显示要查找的数据? 感觉还是CSV格式的好一些,EXCEL的要装插件,以CSV为例,段代码 sqlserver char 对应c# import linecache ...
- 微软宣布Azure Function支持Python
在最近举行的Connect()大会上,微软宣布Azure Functions对Python的支持.开发人员可以使用Python 3.6基于开源的Functional Runtime 2.0构建Func ...
最新文章
- 草根创业都选择的是什么人?
- 腾讯开放TAPD、持续集成平台等核心研发工具,加速AI落地
- C++ url中文编码处理 编码转为UTF8 CChineseCode下载
- uploadify多文件上传插件
- html2canvas图片不能正常截取,html2canvas关于图片不能正常截取
- JAVA线程间协作:wait.notify.notifyAll
- codeforces 476B.Dreamoon and WiFi 解题报告
- 回味颜宁演讲:“勇敢做独一无二的你”
- oracle decode和case when,竟然where 后可以跟着decode 那也就是 where后可以跟着case when ????...
- roseha for linux,ROSEHA for linux安装与操作文档
- windows服务创建工具srvany.exe介绍
- 颜色透明度16进制对照表
- 【模拟电子技术Analog Electronics Technology 20】—— 反馈放大电路分析2:各种类型反馈电路的计算分析
- pomodoro命令行计时器
- ventoy集成微PE+优启通;vmware虚拟机如何进入PE系统,ventoy启动盘制作。
- 固态硬盘计算机怎么自定义分区,如何设置SSD固态硬盘为主硬盘 怎样把SSD分区设置成主分区?...
- jbpm学习笔记(九) task活动之泳道的概念
- 什么是精细化运营?微信会员系统如何建立以用户为中心的精细化运营?
- 设计算法求集合{1, 2, ..., n}的幂集
- 02 | 安全原则:我们应该如何上手解决安全问题?