Django-DRF | 超链接

  • 2020 年 2 月 20 日
  • 筆記

Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

HyperlinkedIdentityField

用超链接的方式有个明确的指向,models 序列化的字段由外键变为超链接的关联形式允许直接通过 pk 跳转到 api 页面。

序列化

class CategorySerializer(serializers.ModelSerializer):      column = ColumnSerializer()      class Meta:          model = Category          fields = ['id','name', 'column']    class ArticleSerializer(serializers.ModelSerializer):      # view_name表示路由的别名,注意如果不是根目录下,则需要使用命名空间来:,      # lookup_field:根据表指定字段,来拼路径,生成链接      # lookup_url_kwarg:默认是pk,(urls.py中的指定的pk)可以不写,反向解析有名分组的名字。      category = serializers.HyperlinkedIdentityField(view_name='api:category_detail', lookup_field='category_id', lookup_url_kwarg='pk')      class Meta:          model = Article          fields = ['id', 'title', 'keywords', 'description', 'cover', 'read_num', 'like_num', 'category', 'tag', 'author']

url配置

urlpatterns = [      path('articles/', ArticListleView.as_view(), name='article_list' ),      path('articles/<int:pk>/', ArticleDetailView.as_view(), name='article_detail'),      path('categories/<int:pk>/', CategoryDetailView.as_view(), name='category_detail'),  ]

视图

class CategoryDetailView(generics.RetrieveUpdateDestroyAPIView):      queryset = Category.objects.all()  # 查询结果集      serializer_class = CategorySerializer  # 序列化类    class ArticListleView(generics.ListCreateAPIView):      queryset = Article.objects.all()  # 查询结果集      serializer_class = ArticleSerializer # 序列化类