博客五部曲之三 - 博客RESTful


1740 浏览 5 years, 9 months

9 CreateView

版权声明: 转载请注明出处 http://www.codingsoho.com/

创建视图

这一节我们会创建一个Create Serializer 以及 CreateView,多数情况下,Create Serializer并不是必须的,但是使用独立的serializer可以让你的代码更简洁。

我们分别添加对应的Serializer, View, URL

class PostCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = [
            "title",
            # "slug",
            "content",
            "publish"
        ]

class PostCreateAPIView(CreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostCreateSerializer

urlpatterns = [
    url(r'^create$', PostCreateAPIView.as_view(), name="create"),

在Serializer里面,把slug注释掉了,因为我们打算这个filed自动生成,不需要用户输入,这个在model的pre_save里完成。

访问 http://127.0.0.1:8000/api/posts/create ,并填好要post的信息

点击post,结果如下,新的post已生成。

实际上,这个Serializer对Create和Update同样适用,所以我们统一改成PostCreateUpdateSerializer

这个时候如果我们打开它的更新视图,http://127.0.0.1:8000/api/posts/new-post-2/edit , slug字段不见了。因为跟PostDetailSerializer相比,少了slug

class PostUpdateAPIView(UpdateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostCreateUpdateSerializer
    lookup_field = "slug"

视图如下,这时我们可以填入新的post内容,然后PUT完成更新。

使用UpdateView编辑的时候,当前值并不会显示出来,初始页面也会报错“Method Get not allowed”,如果我们想基于当前的内容修改的话,就会比较麻烦。这个在下一节解决。