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