在上篇文章中,我们已经介绍了为什么要学习DRF,什么是序列化以及什么是符合RESTful规范的Web API。在本篇文章中我们将以博客为例,使用DRF提供的序列化器(Serializers类)开发两个API接口并测试。这两个API端点的简单描述如下所示 (注意:规范的API文档需要更多信息)。
# 接口描述:文章列表资源。GET请求获取文章列表资源, POST请求提交新文章
# 接口地址: http://127.0.0.1:8000/api/v1/articles
# 请求方式:GET, POST
# 返回参数:JSON格式文章列表和状态码
# 接口描述:单篇文章资源。GET获取文章详情, PUT修改,DELETE删除
# 接口地址: http://127.0.0.1:8000/api/v1/articles/{id}
# 请求方式:GET, PUT, DELETE
# 返回参数: GET和PUT(JSON格式文章详情和状态码), DELETE(状态码)
准备工作
在正式开始前,我们先要用virtualenv创建一个新的Python虚拟环境。如果你使用PyCharm创建Django项目,它会自动为你创建好一个虚拟环境。
virtualenv env
source env/bin/activate
虚拟环境激活后,我们就可以安装我们需要的包了。
pip install django
pip install djangorestframework
接下来我们使用如下命令创建一个名为apiproject的项目,另外创建一个名为blog的app。
django-admin.py startproject apiproject # 创建项目
cd apiproject # 进入项目目录
python manage.py startapp blog
我们需要将新建的blog
app和rest_framework
添加到INSTALLED_APPS
。现在可以编辑apiproject/settings.py
文件, 如下所示:
INSTALLED_APPS =(
...
'rest_framework',
'blog',
)
注意: 如果你使用的Django版本很低或希望避免自己的app名与第三方库的app名冲突,你需要使用blog.apps.BlogConfig
替换blog
。
创建模型 (models)
编辑blog/models.py
文件, 创建Article
模型,用于存储我们博客的文章数据。用户(User)与文章(Article)是单对多的关系(ForeinKey),因为一个用户可以发表多篇文章。为了方便,用户模型我们使用了Django自带的用户模型。
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth import get_user_model
User = get_user_model()
class Article(models.Model):
"""Article Model"""
STATUS_CHOICES = (
('p', _('Published')),
('d', _('Draft')),
)
title = models.CharField(verbose_name=_('Title (*)'), max_length=90, db_index=True)
body = models.TextField(verbose_name=_('Body'), blank=True)
author = models.ForeignKey(User, verbose_name=_('Author'), on_delete=models.CASCADE, related_name='articles')
status = models.CharField(_('Status (*)'), max_length=1, choices=STATUS_CHOICES, default='s', null=True, blank=True)
create_date = models.DateTimeField(verbose_name=_('Create Date'), auto_now_add=True)
def __str__(self):
return self.title