使用Django REST Framework来快速实现API调用服务——下篇(编写API服务)
来源:互联网 发布:无锡关键词优化 编辑:程序博客网 时间:2024/06/05 13:31
使用Django REST Framework来快速实现API调用服务——下篇(编写API服务)
增加加载Djagno REST Framework模块的选项
对于settings.py文件的INSTALLED_APPS增加’rest_framework’的加载项。要利用这个框架生成REST API调用服务,需要实现以下三个模块:
- Serializer:决定如何序列化(或反序列化)模型实体
- ViewSet:决定要序列化哪些模型实体
- URL pattern:决定如何解析URL为对应的服务
看来要实现最基本的API服务所需的代码量并不少啊,但是经过这样模块分割之后,程序的框架其实变得清晰了不少,并且有了更强大的可拓展性。
实现Serializer
新建一个文件blog/serializer.py,内容如下:
# coding: utf-8from rest_framework import serializersfrom .models import User, Entryclass UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('name', 'mail')class EntrySerializer(serializers.ModelSerializer): class Meta: model = Entry fields = ('title', 'body', 'created_at', 'status', 'author')
以上就是定义一个Serializer最简单的代码,model指定对应的模型实体,fields指定要序列化的数据域(可理解为数据库表的某一列)。
其中值得一提的是EntrySerializer中的author,它作为一个外键,其默认输出的是对应模型实体(User)的序列化结果。当然,我们可以修改其序列化实现方式。
实现ViewSet
新建一个文件blog/views.py,内容如下:
# coding: utf-8import django_filtersfrom rest_framework import viewsets, filtersfrom .models import User, Entryfrom .serializer import UserSerializer, EntrySerializerclass UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializerclass EntryViewSet(viewsets.ModelViewSet): queryset = Entry.objects.all() serializer_class = EntrySerializer
实现URL pattern
修改django_rest_framework_test/urls.py,内容如下:
# coding: utf-8from django.conf.urls import url, includefrom django.contrib import adminfrom blog.urls import router as blog_routerurlpatterns = [ url(r'^admin/', admin.site.urls), # blog.urlsをincludeする url(r'^api/', include(blog_router.urls)),]
新建一个文件blog/urls.py,内容如下:
# coding: utf-8from rest_framework import routersfrom .views import UserViewSet, EntryViewSetrouter = routers.DefaultRouter()router.register(r'users', UserViewSet)router.register(r'entries', EntryViewSet)
这样URL pattern的定义就完成了,/api/就是我们REST API服务的入口。
验证结果
执行python3 manage.py runserver
启动服务器,然后在浏览器的地址栏中输入http://localhost:8000/api/就可以查看我们提供的API服务的整体情况。
如果我们只想获取我们真正想要的数据——序列化之后的JSON字符串,可以在最后加上参数?format=json,或者在命令行输入curl http://localhost:8000/api/
。
如果我们想输出所有的博客文章,可以在命令行执行
$ curl http://localhost:8000/api/entries/{"count":1,"next":null,"previous":null,"results":[{"id":1,"title":"测试1的标题","body":"测试1的正文","created_at":"2017-06-05T08:20:39.485093Z","status":"draft","author":{"id":1,"name":"TestUser1","mail":"******@qq.com"}}]}
如果我们想查找并输出id为1的博客文章,可以在浏览器的地址栏中输入http://localhost:8000/api/entries/1。
- 使用Django REST Framework来快速实现API调用服务——下篇(编写API服务)
- 使用Django REST Framework来快速实现API调用服务——上篇(运行环境和模型层)
- ArcGIS API for javascript开发笔记(六)——REST详解及如何使用REST API调用GP服务
- 利用 Django REST framework 编写 RESTful API
- Django REST framework API
- Django REST framework API开发
- Django笔记 Django REST Framework实现Web API 1
- 学习使用"Django REST framework"打造RESTful API接口——第一节 quickstart
- Django Rest FrameWork 全部API简述
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过Jersey客户端API调用REST风格的Web服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- 通过 Jersey 客户端 API 调用 REST 风格的 Web 服务
- Jersey客户端API调用REST风格的Web服务
- 通过Jersey客户端API调用REST风格的Web服务
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【三】——Web Api入门
- c++中回调函数封装成抽象类
- Android Studio Cannot Load Settings from file 错误
- spring 定时任务的 执行时间设置规则【老记不住】
- 内部排序算法的 JAVA 实现
- 求字符串的最长回文子串--最直观的“马拉车算法”分析
- 使用Django REST Framework来快速实现API调用服务——下篇(编写API服务)
- HDU
- JavaScript HTML DOM
- select函数使用
- 统计 CPU 内存 硬盘 使用率的shell脚本
- 浅谈大数据建模
- 读取数据库信息,使用QR码API批量生成二维码并下载到本地
- 在主方法中实现不同数据类型到字符串的转换
- BZOJ 2407 探险