1
- 传统 Django 中就有** 基于类的视图** 的存在,DRF 中自然也有。优点也都差不多,即实现功能的模块化继承、封装,减少重复代码。接下来就用** 文章详情** 接口来练练手 。
1
+ 传统 Django 中就有** 基于类的视图** 的存在,DRF 中自然也有。优点也都差不多,即实现功能的模块化继承、封装,减少重复代码。接下来就用** 文章详情** 接口练练手 。
2
2
3
3
首先在视图中新增下面的代码:
4
4
@@ -28,14 +28,17 @@ class ArticleDetail(APIView):
28
28
def get (self , request , pk ):
29
29
article = self .get_object(pk)
30
30
serializer = ArticleDetailSerializer(article)
31
+ # 返回 Json 数据
31
32
return Response(serializer.data)
32
33
33
34
def put (self , request , pk ):
34
35
article = self .get_object(pk)
35
36
serializer = ArticleDetailSerializer(article, data = request.data)
36
37
# 验证提交的数据是否合法
37
- # 合法则保存, 不合法则返回400
38
+ # 不合法则返回400
38
39
if serializer.is_valid():
40
+ # 序列化器将持有的数据反序列化后,
41
+ # 保存到数据库中
39
42
serializer.save()
40
43
return Response(serializer.data)
41
44
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST )
@@ -49,7 +52,11 @@ class ArticleDetail(APIView):
49
52
...
50
53
```
51
54
52
- 代码不复杂,就是提供了对文章详情的** 获取** 、** 修改** 、** 删除** 的 3 个方法,以及 1 个用于获取具体文章 model 的辅助方法。和之前说的一样,DRF 类视图与传统 Django 的区别,就是多了一个将对象序列化(或反序列化)的步骤。` .delete() ` 方法因为不用返回实际数据,执行完删除动作就OK了。
55
+ 代码不复杂,就是提供了对文章详情的** 获取** 、** 修改** 、** 删除** 的 3 个方法,以及 1 个用于获取单个文章 model 的辅助方法。和之前说的一样,DRF 类视图与传统 Django 的区别,` .get() ` 、 ` .put() ` 就是多了一个将对象序列化(或反序列化)的步骤。` .delete() ` 方法因为不用返回实际数据,执行完删除动作就OK了。
56
+
57
+ > 从这个地方就可以看出,序列化器 ` serializer ` 不仅可以将数据进行序列化、反序列化,还包含数据验证、错误处理、数据库操作等能力。
58
+ >
59
+ > 序列化这个概念与具体语言无关。Python 或 JavaScript 对象转换为 Json 都称为序列化,反之为反序列化。Json 是两种语言传输信息的桥梁,一但信息到达,对方都需要将其还原为自身的数据结构。
53
60
54
61
由于详情接口需要返回完整的字段数据(与阉割版的文章列表接口不同),所以要重新给它定义一个序列化器:
55
62
@@ -84,7 +91,7 @@ urlpatterns = [
84
91
发送一个请求试试:
85
92
86
93
``` python
87
- # 再次提醒:新手读者建议用 Postman 来发送 web 请求
94
+ # 再次提醒:建议用 Postman 来发送 web 请求
88
95
# 教程为了轻便使用了httpie,读者改为Postman即可
89
96
90
97
> http http:// 127.0 .0.1:8000 / api/ article/ 1 /
0 commit comments