在上构建 Django RESTful API Fedora.

[ad_1]

随着 kubernetes 和微服务架构的兴起,能够快速编写和部署 RESTful API 服务是一项很好的技能。 在系列文章的第一部分中,您将学习如何使用 Fedora 构建 RESTful 应用程序并将其部署在 Openshift 上。 我们将一起为“待办事项”应用程序构建后端。

这些 API 允许您创建、读取、更新和删除(CRUD) 一个任务。 任务存储在数据库中,我们使用 Django ORM(对象关系映射)来处理数据库管理。

Django 应用程序和 Rest 框架设置

在新目录中,创建 Python 3 虚拟环境,以便您可以安装依赖项。

$ mkdir todoapp && cd todoapp
$ python3 -m venv .venv
$ source .venv/bin/activate

激活虚拟环境后,安装依赖项。

(.venv)$ pip install djangorestframework django

Django REST 框架或 DRF,是一个可以轻松创建 RESTful CRUD API 的框架。 默认情况下,它可以访问有用的功能,例如可浏览的 API、身份验证管理、数据序列化等。

创建 Django 项目和应用程序

使用 django- 创建 Django 项目admin 提供 CLI 工具。

(.venv) $ django-admin startproject todo_app . # Note the trailing '.'
(.venv) $ tree .
.
├── manage.py
└── todo_app
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
1 directory, 5 files

接下来,在项目中创建应用程序。

(.venv) $ cd todo_app
(.venv) $ django-admin startapp todo
(.venv) $ cd ..
(.venv) $ tree .
.
├── manage.py
└── todo_app
├── __init__.py
├── settings.py
├── todo
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── urls.py
└── wsgi.py

现在项目的基本结构已经就绪,您可以启用 REST 框架和 todo 应用程序。 让我们将 rest_framework 和 todo 添加到项目 settings.py 中的 INSTALL_APPS 列表中。

todoapp/todo_app/settings.py
# Application definition

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'todo_app.todo',
]

应用模型和数据库

构建我们的应用程序的下一步是设置数据库。 默认情况下,Django 使用 SQLite 数据库管理系统。 秒薄薄地 SQLite 运行良好并且在开发过程中易于使用,让我们保留此默认设置。 本系列的第二部分将介绍如何将 SQLite 替换为 PostgreSQL 在生产中运行应用程序。

任务模型

通过将以下代码添加到 todo_app/todo/models.py,您可以定义哪些属性具有任务。 该应用程序定义了具有标题、描述和状态的任务。 任务的状态只能是以下三种状态之一:Backlog、Work in Progress 和 Done。

from django.db import models

class Task(models.Model):
STATES = (("todo", "Backlog"), ("wip", "Work in Progress"), ("done", "Done"))
title = models.CharField(max_length=255, blank=False, unique=True)
description = models.TextField()
status = models.CharField(max_length=4, choices=STATES, default="todo")

现在创建 Django 用于通过更改更新数据库的数据库迁移脚本。

(.venv) $ PYTHONPATH=. DJANGO_SETTINGS_MODULE=todo_app.settings django-admin makemigrations

然后您可以将迁移应用到数据库。

(.venv) $ PYTHONPATH=. DJANGO_SETTINGS_MODULE=todo_app.settings django-admin migrate

此步骤将在应用程序的根目录中创建一个名为 db.sqlite3 的文件。 这是 SQLite 存储数据的地方。

访问数据

创建视图

现在您可以在数据库中表示和存储任务,您需要一种访问数据的方法。 这是我们开始使用 Django REST Framework 的地方 模型视图集. ModelViewSet 在数据模型上提供以下操作:列出、检索、创建、更新、部分更新和销毁。

让我们将视图添加到 todo_app/todo/views.py:

from rest_framework import viewsets

from todo_app.todo.models import Task
from todo_app.todo.serializers import TaskSerializer


class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = TaskSerializer

创建序列化程序

如您所见,TaskViewSet 正在使用 序列化器. 在 DRF 中,序列化程序将应用程序模型中建模的数据转换为原生 Python 数据类型。 例如,此数据类型稍后可以轻松呈现为 JSON 或 XML。 序列化程序还用于将 JSON 或其他内容类型反序列化为模型中定义的数据结构。

让我们通过在项目 todo_app/todo/serializers.py 中创建一个新文件来添加我们的 TaskSerializer 对象:

from rest_framework.serializers import ModelSerializer
from todo_app.todo.models import Task


class TaskSerializer(ModelSerializer):
class Meta:
model = Task
fields = "__all__"

我们正在使用泛型 模型序列化器 从 DRF,自动创建一个序列化器,其字段对应于我们的任务模型。

现在我们有了数据模型、视图和序列化/反序列化数据的方法,我们需要将视图操作映射到 URL。 这样我们就可以使用 HTTP 方法来操作我们的数据。

创建路由器

在这里,我们再次使用 Django REST 框架的强大功能 默认路由器. DRF DefaultRouter 负责将操作映射到 HTTP 方法和 URL。

在我们看到 DefaultRouter 为我们做什么的更好示例之前,让我们添加一个新 URL 来访问我们之前创建的视图。 将以下内容添加到 todo_app/urls.py:

from django.contrib import admin
from django.conf.urls import url, include

from rest_framework.routers import DefaultRouter

from todo_app.todo.views import TaskViewSet

router = DefaultRouter()
router.register(r"todo", TaskViewSet)

urlpatterns = [
url(r"admin/", admin.site.urls),
url(r"^api/", include((router.urls, "todo"))),
]

如您所见,我们正在将 TaskViewSet 注册到 DefaultRouter。 然后,我们将所有路由器 URL 映射到 /api 端点。 这样,DRF 负责将 URL 和 HTTP 方法映射到我们的视图操作(列出、检索、创建、更新、销毁)。

例如,使用 GET HTTP 请求访问 api/todo 端点会调用我们视图的列表操作。 执行相同操作但使用 POST HTTP 请求调用创建操作。

为了更好地理解这一点,让我们运行应用程序并开始使用我们的 API。

运行应用程序

我们可以使用 Django 提供的开发服务器运行应用程序。 此服务器应仅在开发期间使用。 我们将在本教程的第二部分中看到如何使用更适合生产的 Web 服务器。

(.venv)$ PYTHONPATH=. DJANGO_SETTINGS_MODULE=todo_app.settings django-admin runserver
Django version 2.1.5, using settings 'todo_app.settings'
Starting development server at https://127.0.0.1:8000/
Quit the server with CONTROL-C.

现在我们可以通过以下 URL 访问应用程序:https://127.0.0.1:8000/api/

DRF 使用以下 URL 提供查看操作的接口,例如列出或创建任务:https://127.0.0.1:8000/api/todo

或使用此 URL 更新/删除现有任务:https://127.0.0.1:8000/api/todo/1

结论

在本文中,您学习了如何使用 Django REST 框架创建基本的 RESTful API。 在本系列的第二部分中,我们将更新此应用程序以使用 PostgreSQL 数据库管理系统,并将其部署在 OpenShift 中。

该应用程序的源代码可在 GitHub.

[ad_2]

Related Posts