作者选择了 Mozilla 基金会作为 写给捐款计划的一部分,以接收捐款。
介绍
随着对全库开发的需求继续增长,网络框架正在使开发工作流程减少繁琐和提高效率;Django就是其中之一。 Django被用于主要网站,如Mozilla、[PINK2]和Instagram。 与[Flask] (https://flask.palletsprojects.com/en/1.1.x/)这个中性微框架不同,Django PyPI包包含了你需要的全存储开发的一切;不需要为开发建立一个数据库或控制面板.
Django的一个常见用途是使用它来显示来自API(如Instagram帖子或GitHub存储库)的信息在自己的网站和Web应用程序中,虽然这在其他框架中是可能的,但Django的包括电池
理念意味着创造相同的结果将有更少的麻烦和更少的包。
在本教程中,您将构建一个 Django 项目,使用 DigitalOcean v2 API显示您的 DigitalOcean 帐户的 Droplet 信息。具体来说,您将创建一个网站,该网站将显示一张 Droplets 表,列出每个 IP 地址、ID、托管区域和资源。
一旦您完成本教程,您将有一个Django项目,可以制作一个看起来像这样的网页:
前提条件
在您开始本指南之前,您将需要以下内容:
- DigitalOcean账户,至少有一个Droplet,以及一个[个人访问符 (https://andsky.com/tech/tutorials/how-to-use-the-digitalocean-api-v2# how-to-generate-a-personal-access-token). 一定要在安全的地方录下信物;以后在这个教程中会需要它.
- 向API提出要求的熟悉程度。 关于与API合作的综合教程,请查看[Python3中如何使用Web API(https://andsky.com/tech/tutorials/how-to-use-web-apis-in-python-3).
- Python的本地虚拟环境,用于维持依赖性. 在这个教程中,我们将使用
do-django-api'作为我们的项目目录,
env'作为我们的虚拟环境。 - 熟悉Django用API数据渲染页面的模板逻辑。
- 熟悉Django的观点处理从API中取回的数据的逻辑,并把它交给一个模板进行渲染. .
第1步:创建一个基本的Django项目
从虚拟环境env
中,安装Django:
1pip install Django
现在你可以开始一个Django项目,并运行一些初始设置命令。
使用「django-admin startproject
1django-admin startproject do_django_project
2cd do_django_project
一旦它被创建,在这个子目录中,你会发现manage.py
,这是与Django互动并运行您的项目的常见方式。
1python3 manage.py migrate
您将看到像数据库更新这样的输出:
1[secondary_label Output]
2Operations to perform:
3 Apply all migrations: admin, auth, contenttypes, sessions
4Running migrations:
5 Applying contenttypes.0001_initial... OK
6 Applying auth.0001_initial... OK
7 Applying admin.0001_initial... OK
8 Applying admin.0002_logentry_remove_auto_add... OK
9 Applying admin.0003_logentry_add_action_flag_choices... OK
10 Applying contenttypes.0002_remove_content_type_name... OK
11 Applying auth.0002_alter_permission_name_max_length... OK
12 Applying auth.0003_alter_user_email_max_length... OK
13 Applying auth.0004_alter_user_username_opts... OK
14 Applying auth.0005_alter_user_last_login_null... OK
15 Applying auth.0006_require_contenttypes_0002... OK
16 Applying auth.0007_alter_validators_add_error_messages... OK
17 Applying auth.0008_alter_user_username_max_length... OK
18 Applying auth.0009_alter_user_last_name_max_length... OK
19 Applying auth.0010_alter_group_name_max_length... OK
20 Applying auth.0011_update_proxy_permissions... OK
21 Applying sessions.0001_initial... OK
接下来,使用runserver
命令来运行该项目,以便您可以测试它:
1python3 manage.py runserver
当服务器启动时,输出将看起来像这样:
1[secondary_label Output]
2Watching for file changes with StatReloader
3Performing system checks...
4
5System check identified no issues (0 silenced).
6September 22, 2019 - 22:57:07
7Django version 2.2.5, using settings 'do_django_project.settings'
8Starting development server at http://127.0.0.1:8000/
9Quit the server with CONTROL-C.
你现在有一个基本的Django项目和一个正在运行的开发服务器。 要查看正在运行的开发服务器,请在浏览器中访问‘127.0.0.1:8000’。
接下来,您将创建一个Django应用程序,并配置您的项目以从该应用程序中运行视图,以便您看到比默认页面更有趣的东西。
第2步:创建一个基本的Django应用程序
在此步骤中,您将创建该应用程序的骨骼,该应用程序将保留您的 Droplet 结果. 您将在稍后设置 API 调用后返回该应用程序以填充数据。
请确保您位于 do_django_project
目录中,并使用以下命令创建 Django 应用程序:
1python3 manage.py startapp display_droplets
现在你需要在settings.py
文件中将新应用程序添加到INSTALLED_APPS
,以便Django可以识别它。settings.py
是Django配置文件,位于Django项目的另一个子目录中,与项目文件夹(do_django_project
)相同的名称。
1cd do_django_project
在您选择的编辑器中编辑settings.py
:
1nano settings.py
将您的新应用程序添加到文件的INSTALLED_APPS
部分:
1[label do_django_api/do_django_project/do_django_project/settings.py]
2INSTALLED_APPS = [
3 'django.contrib.admin',
4 'django.contrib.auth',
5 'django.contrib.contenttypes',
6 'django.contrib.sessions',
7 'django.contrib.messages',
8 'django.contrib.staticfiles',
9 # The new app
10 'display_droplets',
11]
保存并关闭文件,当你完成。
GetDroplets 查看功能
接下来,您将创建一个函数,即GetDroplets
,在display_droplets
应用程序的views.py
文件中。这个函数将使您将使用的模板从API中显示Droplet数据,作为背景
。
转到display_droplets
目录:
1cd ..
2cd display_droplets
打开views.py
来编辑:
1nano views.py
将以下代码添加到文件中:
1[label do_django_api/do_django_project/display_droplets/views.py]
2from django.views.generic import TemplateView
3
4class GetDroplets(TemplateView):
5 template_name = 'droplets.html'
6 def get_context_data(self, *args, **kwargs):
7 pass
保存并关闭文件。
稍后,您将填充此函数并创建droplets.html
文件,但首先,当您访问开发服务器根目录时,请配置urls.py
来调用此函数(‘127.0.0.1:8000’)。
返回do_django_project
目录:
1cd ..
2cd do_django_project
打开 urls.py 来编辑:
1nano urls.py
为GetDroplets
添加一个导入
陈述,然后向urlpatterns
添加一个额外的路径,该路径将指向新视图。
1[label do_django_api/do_django_project/do_django_project/urls.py]
2from django.contrib import admin
3from django.urls import path
4from display_droplets.views import GetDroplets
5
6urlpatterns = [
7 path('admin/', admin.site.urls),
8 path('', GetDroplets.as_view(template_name='droplets.html'), name='Droplet View'),
9]
如果你想创建自己的自定义路径,第一个参数是URL(如example.com/**admin**
),第二个参数是调用函数来生成网页,第三个参数只是路径的名称。
保存并关闭文件。
Dropplets 模板
接下来,您将使用 templates. 模板是 Django 使用创建网页的 HTML 文件. 在这种情况下,您将使用模板来构建显示 API 数据的 HTML 页面。
返回display_droplets
目录:
1cd ..
2cd display_droplets
在此目录中,创建一个模板
文件夹并切换到该目录:
1mkdir templates
2cd templates
创建droplets.html
并打开它来编辑:
1nano droplets.html
为了避免为这个项目写任何类型的CSS,我们将使用Bulma CSS(https://bulma.io/),因为它是一个免费的和轻量级的CSS框架,允许您通过添加几个类属性来创建干净的网页。
现在让我们创建一个具有基本导航栏的模板,然后将下面的代码添加到droplets.html
文件中。
1[label do_django_api/do_django_project/display_droplets/templates/droplets.html]
2<!DOCTYPE html>
3<html lang="en">
4<head>
5 <meta charset="UTF-8">
6 <title>DigitalOcean Droplets</title>
7 <link crossorigin="anonymous"
8 href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.min.css"
9 integrity="sha256-8B1OaG0zT7uYA572S2xOxWACq9NXYPQ+U5kHPV1bJN4="
10 rel="stylesheet"/>
11 <link rel="shortcut icon" type="image/png" href="https://assets.digitalocean.com/logos/favicon.png"/>
12</head>
13<body>
14<nav aria-label="main navigation" class="navbar is-light" role="navigation">
15 <div class="navbar-brand">
16 <div class="navbar-item">
17 <img atl="DigitalOcean" src="https://assets.digitalocean.com/logos/DO_Logo_icon_blue.png"
18 style="margin-right: 0.5em;">Droplets
19 </div>
20 </div>
21</nav>
22</body>
23</html>
保存并关闭文件。
此代码将 Bulma 导入到 boilerplate HTML 中,并创建一个显示Droplets
的nav
栏。
更新您的浏览器卡以查看您对模板所做的更改。
到目前为止,您还没有触及任何与 API 相关的内容;您已经为该项目创建了一个基础,接下来您将通过进行 API 调用并呈现 Droplet 数据来充分利用此页面。
步骤 3 – 进行 API 调用
在此步骤中,您将设置 API 调用并将 Droplet 数据作为背景发送到模板中,以在表中显示。
获取漏洞数据
返回display_droplets
应用程序目录:
1cd ..
安裝 requests
圖書館,以便您可以與 API 進行對話:
1pip install requests
请求
库允许您的代码从 API 请求数据,并添加标题(与我们的请求一起发送的额外数据)。
接下来,你会创建一个 services.py
文件,这是你将进行 API 调用的地方. 这个函数将使用 requests' 来与
https://api.digitalocean.com/v2/droplets' 交谈,并附加返回列表的 JSON 文件中的每个 Droplet。
打开services.py
来编辑:
1nano services.py
将以下代码添加到文件中:
1[label do_django_api/do_django_project/display_droplets/services.py]
2import os
3import requests
4
5def get_droplets():
6 url = 'https://api.digitalocean.com/v2/droplets'
7 r = requests.get(url, headers={'Authorization':'Bearer %s' % 'access_token'})
8 droplets = r.json()
9 droplet_list = []
10 for i in range(len(droplets['droplets'])):
11 droplet_list.append(droplets['droplets'][i])
12 return droplet_list
在get_droplets
函数中,发生了两件事:一个请求和数据被解析。url
包含从DigitalOcean API请求Droplet数据的URL。
请求
在这种情况下需要两个参数:url
和标题
。如果你想要来自不同的API的数据,你会用适当的URL代替url
值。
dropplets
包含从r
变量的信息,但现在它已经从JSON
转换,该格式的API发送信息,到一个字典,这是易于在为
循环中使用。
接下来的三个行会创建一个数组,dropplet_list[]
。然后一个for
循环会重复dropplets
中的信息,并将每个项目添加到列表中。
<$>[注] 注: 不要忘了用你的访问令牌代替access_token
。
保存并关闭文件。
保护您的访问代码
你应该总是隐藏你的访问代码,但如果有人想运行你的项目,你应该有一个简单的方法,让他们添加自己的访问代码,而无需编辑Python代码。
返回do_django_project
目录:
1cd ..
要开始使用环境变量,请安装 python-dotenv
:
1pip install python-dotenv
一旦安装,您需要配置 Django 来处理环境变量,以便您可以将其引用到代码中。
打开manage.py
来编辑:
1nano manage.py
添加以下代码:
1[label do_django_api/do_django_project/manage.py]
2
3"""Django's command-line utility for administrative tasks."""
4import os
5import sys
6import dotenv
7
8def main():
9 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'do_django_project.settings')
10 try:
11 from django.core.management import execute_from_command_line
12 except ImportError as exc:
13 raise ImportError(
14 "Couldn't import Django. Are you sure it's installed and "
15 "available on your PYTHONPATH environment variable? Did you "
16 "forget to activate a virtual environment?"
17 ) from exc
18 execute_from_command_line(sys.argv)
19
20if __name__ == '__main__':
21 main()
22
23dotenv.load_dotenv(
24 os.path.join(os.path.dirname(__file__), '.env')
25)
将此添加到manage.py中意味着,当您发出命令给开发中的Django时,它将处理来自您的.env 文件的环境变量。
保存并关闭文件。
如果您需要在生产项目中处理环境变量,您可以从wsgi.py
文件中这样做。
1cd do_django_project
然后打开wsgi.py
来编辑:
1nano wsgi.py
将以下代码添加到 wsgi.py
:
1[label do_django_api/do_django_project/do_django_project/wsgi.py]
2
3import os
4import dotenv
5
6from django.core.wsgi import get_wsgi_application
7
8os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'do_django_project.settings')
9
10dotenv.load_dotenv(
11 os.path.join(os.path.dirname(os.path.dirname(__file__)), '.env')
12)
13
14application = get_wsgi_application()
这个代码片段有一个额外的os.path.dirname()
,因为wsgi.py
需要回顾两个目录以找到.env
文件。
保存并关闭文件。
现在,您可以使用services.py
中的环境变量,而不是您的访问代码。
1cd ..
2cd display_droplets
打开services.py
来编辑:
1nano services.py
现在,用环境变量替换您的访问令牌:
1[label do_django_api/display_droplets/services.py]
2import os
3import requests
4
5def get_droplets():
6 url = "https://api.digitalocean.com/v2/droplets"
7 r = requests.get(url, headers={'Authorization':'Bearer %s' % os.getenv('DO_ACCESS_TOKEN')})
8 droplets = r.json()
9 droplet_list = []
10 for i in range(len(droplets['droplets'])):
11 droplet_list.append(droplets['droplets'][i])
12 return droplet_list
保存并关闭文件。
下一步是创建一个 .env
文件. 返回 do_django_project
目录:
1cd ..
创建一个 .env
文件,并将该文件用于编辑:
1nano .env
在 .env
中,将您的代币添加为变量 DO_ACCESS_TOKEN
:
1[label do_django_api/do_django_project/.env]
2DO_ACCESS_TOKEN=access_token
保存并关闭文件。
<$>[注] 注: 将 .env
添加到您的 .gitignore
文件中,以便它永远不会被包含在您的委托中。
API 连接现在已设置和配置,您也已经保护了您的访问代码,现在是时候向用户展示您获取的信息了。
步骤 4 — 在视图和模板中处理滴滴数据
现在你可以进行API调用,你需要将Droplet数据发送到模板进行渲染。让我们回到函数的支柱,GetDroplets
,你在views.py
中创建的。
转到display_droplets
目录:
1cd display_droplets
打开views.py
来编辑:
1nano views.py
将以下代码添加到「views.py」中:
1[label do_django_api/do_django_project/display_droplets/views.py]
2from django.shortcuts import render
3from django.views.generic import TemplateView
4from .services import get_droplets
5
6class GetDroplets(TemplateView):
7 template_name = 'droplets.html'
8 def get_context_data(self, *args, **kwargs):
9 context = {
10 'droplets' : get_droplets(),
11 }
12 return context
向droplets.html
模板发送的信息通过背景
字典进行处理,这就是为什么droplets
作为一个密钥,而从get_droplets()
返回的数组作为一个值。
保存并关闭文件。
在模板中呈现数据
在droplets.html
模板中,您将创建一个表并填充滴滴数据。
转到templates
目录:
1cd templates
打开droplets.html
来编辑:
1nano droplets.html
在droplets.html
中添加nav
元素之后的以下代码:
1[label do_django_api/do_django_project/display_droplets/templates/droplets.html]
2<table class="table is-fullwidth is-striped is-bordered">
3 <thead>
4 <tr>
5 <th>Name</th>
6 <th>IPv4 Address(es)</th>
7 <th>Id</th>
8 <th>Region</th>
9 <th>Memory</th>
10 <th>CPUs</th>
11 <th>Disk Size</th>
12 </tr>
13 </thead>
14 <tbody>
15 {% for droplet in droplets %}
16 <tr>
17 <th>{{ droplet.name }}</th>
18 {% for ip in droplet.networks.v4 %}
19 <td>{{ ip.ip_address }}</td>
20 {% endfor %}
21 <td>{{ droplet.id }}</td>
22 <td>{{ droplet.region.name }}</td>
23 <td>{{ droplet.memory }}</td>
24 <td>{{ droplet.vcpus }}</td>
25 <td>{{ droplet.disk }}</td>
26 </tr>
27 {% endfor %}
28 </tbody>
29</table>
{% for droplet in droplets %}... {% endfor %}' 是一个循环,通过从
views.py` 获取的 Droplets 数组迭代。
保存并关闭文件。
刷新您的浏览器,你会看到一个列表的Dropplets。
您现在可以在 Django 项目中处理 DigitalOcean API. 您已从 API 中获取的数据并将其插入到您之前创建的模板中,以便以可读和灵活的方式显示信息。
结论
在本文中,你建立了一个Django项目,可以显示DigitalOcean API的Droplet信息,使用Bulma CSS风格。
- 如何在 Python 中使用
请求
和json
模块处理 API 请求 * 如何在 Django 项目中使用查看
和模板
逻辑显示 API 数据 * 如何在 Django 中使用dotenv
安全地处理 API 代币。
现在你已经了解了如何在Django中处理API,你可以使用DigitalOcean API的另一个功能或完全不同的API来创建自己的项目,你也可以查看其他Django教程(https://andsky.com/tech/tutorials/how-to-build-a-modern-web-application-to-manage-customer-information-with-django-and-react-on-ubuntu-18-04)或类似的React框架教程(https://andsky.com/tech/tutorials/how-to-display-data-from-the-digitalocean-api-with-react)。