Views
最后一步是创建我们的视图。 Django REST Framework 具有几个有用的通用视图。 我们已经在 Library API 和 Todos API 中都使用ListAPIView来创建一个只读端点集合,实质上是所有模型实例的列表。 在 Todos API 中,我们还将RetrieveAPIView用作只读的单个端点,这类似于传统 Django 中的详细信息视图。
对于我们的 Blog API,我们希望将所有可用的博客文章列出为读写端点,这意味着使用ListCreateAPIView,它类似于我们之前使用的 ListAPIView,但允许写操作。 我们还希望使各个博客帖子可供阅读,更新或删除。 可以肯定的是,有一个内置的通用 Django REST Framework 视图正用于此目的:RetrieveUpdateDestroyAPIView。 这就是我们在这里使用的。
更新view.py
文件,如下:
# posts/views.py from rest_framework import generics from .models import Post from .serializers import PostSerializer class PostList(generics.ListCreateAPIView): queryset = Post.objects.all() serializer_class = PostSerializer class PostDetail(generics.RetrieveUpdateDestroyAPIView): queryset = Post.objects.all() serializer_class = PostSerializer
在文件的顶部,我们从 Django REST Framework 以及模型和序列化器文件导入泛型。 然后,我们创建两个视图。 PostList 使用通用的 ListCreateAPIView,而 PostDetail 使用 RetrieveUpdateDestroyAPIView。
我们要做的就是更新通用视图以从根本上改变给定 API 端点的行为,这非常令人惊讶。 这是使用诸如 Django REST Framework 之类的功能齐全的框架的优势:所有这些功能都是可用的,经过测试的并且可以正常使用。 作为开发人员,我们不必在这里重新发明轮子。
至此,我们的 API 现在已经完成,我们真的不必自己编写太多代码。 在接下来的章节中,我们将对 API 进行其他改进,但是值得一提的是,它已经执行了我们想要的基本列表和 CRUD 功能。 是时候使用 Django Rest Framework 的可浏览 API 进行测试了。
Browsable API
启动本地服务器以与我们的 API 进行交互。
(blogapi) $ python manage.py runserver
然后转到 http://127.0.0.1:8000/api/v1/ 查看博客列表终端。
该页面以 JSON 格式显示了我们的博客文章列表(目前只有一个)。 注意,GET 和 POST 方法都被允许。
现在,让我们确认是否存在我们的模型实例终结点,该终结点与单个帖子而不是所有帖子的列表有关。
转到 http://127.0.0.1:8000/api/v1/1/.
您可以在标头中看到支持 GET,PUT,PATCH 和 DELETE,但不支持 POST。 实际上,您可以使用下面的 HTML 表单进行更改,甚至可以使用红色的“ DELETE”按钮删除实例。
让我们尝试一下。 最后用其他文字(已编辑)更新标题。 然后点击“ PUT”按钮。
通过单击页面顶部的链接返回到“帖子列表”视图,或直接导航到 http://127.0.0.1:8000/api/v1/,您也可以在那里查看更新的文本。
总结
此时,我们的 Blog API 完全可用。 但是,有一个大问题:任何人都可以更新或删除现有博客文章! 换句话说,我们没有任何权限。 在下一篇文章中,我们将学习如何应用权限来保护我们的 API。