官方文档链接 : http://www.django-rest-framework.org/#tutorial
一、安装
要求
REST框架需要以下内容:
- Python(2.7,3.2,3.3,3.4,3.5,3.6)
- Django(1.10,1.11,2.0)
以下软件包是可选的:
- coreapi(1.32.0+) - 模式生成支持。
- Markdown(2.1.0+) - 可浏览API的Markdown支持。
- django-filter(1.0.1+) - 过滤支持。
- django-crispy-forms - 改进了用于过滤的HTML显示。
- django-guardian(1.1.1+) - 对象级权限支持。
安装使用pip,包括您想要的任何可选软件包.
pip install djangorestframework pip install markdown # Markdown support for the browsable API. pip install django-filter # Filtering support
二、基本使用
1.配置
添加'rest_framework'到您的INSTALLED_APPS设置。
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
'rest_framework', # 需要使用的drf模块
...
]
2.设置路由
如果您打算使用可浏览的API,您可能还需要添加REST框架的登录和注销视图。将以下内容添加到您的根urls.py文件。
urlpatterns = [
...
url(r'^api-auth/', include('rest_framework.urls'))
...
]
请注意,URL路径可以是任何你想要的
3.编写serializers(序列化器)
序列化器类似于 Django 中的 forms,只要的作用是对你从 model 中获得的结果进行校验、序列化等。所以他的 字段要跟你的 结果中的字段保持一致 。
每个 app 都应该有一个 serializers.py 文件 用来专门做该 app 的序列化处理, 参考 forms 。
from rest_framework import serializers
class ReatappSerializer(serializers.Serializer):
name = serializers.CharField(required=True, max_length=100)
click_num = serializers.IntegerField(default=0)
4.编写View(视图)
在视图中,先要导入 APIView ,让编写的视图类继承自 APIView 类,
再导入写好的 序列化器 ,用来对model 中的结果进行序列化
最后 导入 Response 用来返回数据。
from .serializers import ReatappSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
class SnippetListView(APIView):
def get(self, request, format=None):
snippets = Snippet.objects.all() # 查询model 中的数据
# 将查询结果放入序列化器,获取序列化后的结果
snippets_serializer = ReatappSerializer(snippets, many=True)
# 把序列化后的结果中的 data 用 Response 方式返回。
return Response(snippets_serializer.data)
由下图源码可见, APIView 其实是继承自 View 这个类。
5.为视图配置 url
APIView 视图的配置跟 View 一样,如下,先导入视图,再配置路由
from restapp.views import SnippetListView
添加 :
url(r'^snippetList/$',SnippetListView.as_view(),name='SnippetList'),
到此为止,restful api 已经完成,访问 127.0.0.1:8000/snippetList 就可以看到一个页面中有
我们需要的数据(出现在序列化器里面的字段才能看得到!!!)。