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 # 序列化类