博客五部曲之三 - 博客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/