博客五部曲之三 - 博客RESTful
1594 浏览 5 years, 9 months
14 添加超链接
版权声明: 转载请注明出处 http://www.codingsoho.com/添加超链接
在list视图里,返回了post的部分相关信息。如果我们想快速的看详细怎么办呢?而且有的时候我们并不需要list视图里返回那么多信息。
这个时候我们可以用超链接去访问,其实这个跟非RESTful的需求及实现都是一致的。
HyperlinkedIdentityField
首先,我们导入,它将会用于定义超链接字段
from rest_framework.serializers import HyperlinkedIdentityField
定义超链接字段
这个用法跟get_absolute_url
非常一致,view_name
为URL的名字,lookup_field一般为pk,这儿我们在urls.py里用的是slug,所以这儿我们用slug
在fileds里面添加url, 同时注释掉slug,这个不是必须的,但是现在已没有必要了
post_detail_url = HyperlinkedIdentityField(
view_name = "posts-api:detail",
lookup_field = "slug",
)
class PostListSerializer(serializers.ModelSerializer):
url = post_detail_url
class Meta:
model = Post
fields = [
"url",
"title",
# "slug",
"publish",
"user",
]
delete
同样的方法,我们可以添加删除超链接。不推荐,因为这个轻易暴露了删除方法。
post_delete_url = HyperlinkedIdentityField(
view_name = "posts-api:delete",
lookup_field = "slug",
)
class PostListSerializer(serializers.ModelSerializer):
url = post_detail_url
delete_url = post_delete_url
class Meta:
model = Post
fields = [
"url",
"title",
# "slug",
"publish",
"user",
"delete_url"
]
效果图如下
detail
这个方法同样适用于detail视图,我们也可以添加下面的实现
class PostDetailSerializer(serializers.ModelSerializer):
url = post_detail_url
class Meta:
model = Post
fields = [
"url",
"title",
"slug",
"publish"
]
效果图如下
更多实现可以参考 http://www.django-rest-framework.org/api-guide/pagination/