Django REST Framework教程(2): 序列化器介绍及以博客为例开发基于函数视图的API

本文介绍了如何使用Django REST Framework(DRF)的序列化器开发基于函数视图的API,以博客应用为例,讲解了如何创建自定义序列化器、ModelSerializers类以及编写API视图。通过示例展示了GET、POST、PUT请求的处理,并强调了read-only字段的使用和API视图中使用@api_view装饰器的重要性。
摘要由CSDN通过智能技术生成

在上篇文章中,我们已经介绍了为什么要学习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 

我们需要将新建的blogapp和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


    
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值