使用Django构建的API的理解[第二部分:创建应用程序并维护模型]
本文为 “djangoを理解する記事第2回 アプリを作ってモデル周りの整備を進めます”,翻译成汉语可以是:在理解Django系列文章的第2部分中,我们将创建一个应用程序并进行模型方面的维护。
请点击此处查看上一篇文章
了解使用Django进行API开发 [第1部分:目标澄清与环境设置]
我要开发一个应用程序。
首先我们要制作一个应用程序。
首先,我要确认一下上一次复习中应用程序是什么意思。
我会拉出上一次写的文件的和译版本。
应用程序是指像博客系统、公共记录数据库、小型投票应用程序等一些web应用程序。
我将在之前创建的项目中制作一个用作其中功能的应用程序。
您可以使用以下命令创建该应用程序。
python manage.py startapp <アプリ名>
这次我想要创建一个博客文章的功能,所以我会在Docker容器内执行以下命令。
root@6f4ae531bd2c:/code/myblog# python manage.py startapp entry
运行后,在目录中创建一个名为entry的文件夹,并生成一个模板。
入口的设计与构建
我们将根据django-rest-framework的教程来进行以下步骤。首先,我们会在settings中引入应用程序和django-rest-framework。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'rest_framework',
+ 'entry',
]
我将创建一个entry的模型。
from django.db import models
class Entry(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(max_length=100, blank=False)
body = models.TextField()
class Meta:
ordering = ['created']
这个模型具有以下要素。
-
- created
作成日時
title
記事のタイトル
body
記事の内容
一旦ユーザーを複数登録できる様にとかは考えていないのでこんな構成で行きます。
モデルができたらmigrationを実施します。
python manage.py makemigrations <モデル名>
通过执行该操作,将创建一个应用程序/迁移目录,并在其中生成迁移文件。
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Entry',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('title', models.CharField(max_length=100)),
('body', models.TextField()),
],
options={
'ordering': ['created'],
},
),
]
在执行以下命令后,将按照以下流程在目标模型上执行。
python manage.py migrate <モデル名>
序列化器的实现
我们将按照Django Rest Framework的文档进行操作。
序列化器是用于处理数据的读写的类。
具体来说,如下所示创建:
from rest_framework import serializers
from entry.models import Entry
class EntrySerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(required=False, allow_blank=False, max_length=100)
body = serializers.CharField()
def create(self, validated_data):
return Entry.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.title = validated_data('title',instance.title)
instance.body = validated_data('body', instance.body)
instance.save()
return instance
根据模型的定义,我们会定义一个类。创建操作会经过验证,如果可以创建,则进行创建;更新操作会按照项进行更新。下次我们会将其修改为可以作为API调用的形式。当前代码可以在github上找到。
请参阅
Django REST Framework教程