使用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调用服务,需要实现以下三个模块:

  1. Serializer:决定如何序列化(或反序列化)模型实体
  2. ViewSet:决定要序列化哪些模型实体
  3. 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服务的整体情况。
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。
ID为1的博客文章

阅读全文
0 0
原创粉丝点击