Django REST框架是一个功能强大且灵活的工具包,用于构建Web API。
Django Rest Framework(DRF)为我们的Django Talk项目创建RESTFul API ,这是一个用于快速构建基于Django模型的RESTful API的应用程序。一个能快速为我们提供API接口,方便我们编程的框架。API是后端编程人员写的,为了让前端拿数据的一个接口,通常就是以url的形式存在.
DRF设置
安装:
$ pip install djangorestframework
$ pip freeze> requirements.txt
更新settings.py:
INSTALLED_APPS = (
‘django.contrib.admin’ ,
‘django.contrib.auth’ ,
‘django.contrib.contenttypes’ ,
‘django.contrib.sessions’ ,
‘django.contrib.messages’ ,
‘django.contrib.staticfiles’ ,
‘应用’ ,
‘rest_framework’
)
RESTful结构
在RESTful API中,端点(URL)定义API的结构以及最终用户如何使用HTTP方法从我们的应用程序访问数据:GET,POST,PUT,DELETE。端点应按逻辑方式围绕集合和元素进行组织,这两者都是资源。在我们的例子中,我们有一个单一的资源,posts因此我们将分别使用以下URLS - /posts/以及/posts/集合和元素。
GET POST PUT DELETE
/posts/ 显示所有帖子 添加新帖子 更新所有帖子 删除所有帖子
/posts/ 节目 N / A 更新 删除 id
DRF的Serializers将模型实例转换为Python dictionaires,然后可以以各种API适当的格式呈现 - 如JSON或XML。与Django类似ModelForm,DRF为其Serializers提供了简洁的格式ModelSerializer。它使用简单:只需告诉它要从模型中使用哪些字段:
来自 rest_framework 导入 序列化器
来自 talk.models import Post
类 PostSerializer (串行器。ModelSerializer ):
class Meta :
model = Post
fields = ('id' , 'author' , 'text' , 'created' , 'updated' )
更新视图
我们需要重构当前的视图以适应RESTful范例。注释掉当前视图并添加:
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework.decorators import api_view
from rest_framework.response import Response
from talk.models import Post
from talk.serializers import PostSerializer
from talk.forms import PostForm
def home(request):
tmpl_vars = {‘form’: PostForm()}
return render(request, ‘talk/index.html’, tmpl_vars)
@api_view([‘GET’])
def post_collection(request):
if request.method == ‘GET’:
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
@api_view([‘GET’])
def post_element(request, pk):
try:
post = Post.objects.get(pk=pk)
except Post.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = PostSerializer(post)
return Response(serializer.data)
首先,@api_view装饰器检查是否将适当的HTTP请求传递给视图函数。现在,我们只支持GET请求。
然后,视图要么抓取所有数据,要么抓取集合,要么只抓取一个帖子,如果它是元素。
最后,数据被序列化为JSON并返回。
URL:
from django.conf.urls import patterns, url
urlpatterns = patterns(
‘talk.views’,
url(r’^$’, ‘home’),
# api
url(r'^api/v1/posts/$', 'post_collection'),
url(r'^api/v1/posts/(?P[0-9]+)$', 'post_element')
)
启动服务器,然后导航到:http://127.0.0.1:8000 /api / v1 / post /?format = json
现在我们看看API 导航到http://127.0.0.1:8000/api/v1/posts/