用Rest-framework搭建Django Restful API七:Router快速入门
2024-01-12 08:02:08
Rest-framework作为一个Python Web框架,帮助开发者快速、简单地创建RESTful API。它提供了许多特性和工具来简化API开发流程,其中之一就是路由。
1. 路由概述
路由是指将HTTP请求映射到适当的视图函数或类。在Rest-framework中,路由被分为两类:
- 默认路由: 根据视图集的queryset属性自动生成路由。
- 自定义路由: 允许开发者定义自己的路由规则,以实现更细粒度的控制。
2. 使用默认路由
默认路由是Rest-framework提供的最简单、最常用的路由方式。它根据视图集的queryset属性自动生成路由。例如,考虑以下视图集:
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
对于这个视图集,Rest-framework将自动生成以下路由:
/articles/
:用于获取所有文章列表或创建新文章。/articles/<pk>/
:用于获取、更新或删除单个文章。
默认路由非常方便,但有时可能需要更细粒度的控制。例如,可能需要自定义路由以指定不同的URL模式或用户访问权限。
3. 使用自定义路由
自定义路由允许开发者定义自己的路由规则。可以使用routers.DefaultRouter
或routers.SimpleRouter
来创建自定义路由。
以下示例演示如何使用routers.DefaultRouter
创建自定义路由:
router = routers.DefaultRouter()
router.register(r'articles', ArticleViewSet)
这将生成与默认路由相同的路由,但也可以使用router.register()
方法来指定不同的URL模式或用户访问权限。例如:
router = routers.DefaultRouter()
router.register(r'articles', ArticleViewSet, basename='article')
这将生成以下路由:
/articles/
:用于获取所有文章列表或创建新文章。/articles/<article-id>/
:用于获取、更新或删除单个文章。
也可以使用router.register()
方法来指定用户访问权限。例如:
router = routers.DefaultRouter()
router.register(r'articles', ArticleViewSet, permission_classes=[IsAuthenticated])
这将要求用户在访问文章资源之前进行身份验证。
4. 返回所有列表视图的超链接
Rest-framework还提供了一种方法来返回所有列表视图的超链接。这可以使用HyperlinkedModelSerializer
类来实现。例如:
class ArticleSerializer(HyperlinkedModelSerializer):
class Meta:
model = Article
fields = ('id', 'title', 'content')
然后可以使用GenericAPIView
类来创建列表视图:
class ArticleList(GenericAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
def get(self, request, format=None):
return Response(self.get_queryset(), status=status.HTTP_200_OK)
这将生成一个列表视图,它将返回所有文章的超链接。
5. 模板化映射每个视图集的URL模式
Rest-framework还提供了一种方法来模板化映射每个视图集的URL模式。这可以使用format_suffix_patterns()
函数来实现。例如:
urlpatterns = [
path('api/', include(router.urls, format_suffix_patterns=[
('', {'format': '.json'}),
('html', {'format': '.html'}),
])),
]
这将生成以下URL模式:
/api/articles/
:用于获取所有文章列表或创建新文章。/api/articles/<article-id>/
:用于获取、更新或删除单个文章。/api/articles.json/
:用于获取所有文章列表(JSON格式)。/api/articles/<article-id>.json/
:用于获取单个文章(JSON格式)。/api/articles.html/
:用于获取所有文章列表(HTML格式)。/api/articles/<article-id>.html/
:用于获取单个文章(HTML格式)。
6. 总结
Rest-framework中的路由提供了许多特性和工具来简化API开发流程。开发者可以使用默认路由或自定义路由来定义API的URL模式。Rest-framework还提供了一种方法来返回所有列表视图的超链接,以及一种方法来模板化映射每个视图集的URL模式。这些特性和工具使Rest-framework成为开发Django Restful API的理想选择。