1
1
## ModelSerializer
2
2
3
- 上一章我们写了一个简单的序列化类 :
3
+ 上一章我们借助 DRF 库,写了一个简单的序列化器 :
4
4
5
5
``` python
6
6
class ArticleListSerializer (serializers .Serializer ):
@@ -11,9 +11,9 @@ class ArticleListSerializer(serializers.Serializer):
11
11
updated = serializers.DateTimeField()
12
12
```
13
13
14
- 这个序列化器类长得跟 ` Form ` 或者 ` Model ` 也太像了,甚至感觉代码都重复了。如果能再简化一下就更好了。
14
+ 这个序列化器长得跟 ` Form ` 或者 ` Model ` 也太像了,甚至感觉代码都重复了。如果能再简化一下就更好了。DRF 也考虑到了这一点,提供了现成的解决方案,也就是 ` ModelSerializer ` 了 。
15
15
16
- DRF 已经替你考虑好了,也就是 ` ModelSerializer ` 了。将序列化类修改为下面这样 :
16
+ 将序列化器修改为下面这样 :
17
17
18
18
``` python
19
19
# article/serializers.py
@@ -32,7 +32,7 @@ class ArticleListSerializer(serializers.ModelSerializer):
32
32
]
33
33
```
34
34
35
- ` ModelSerializer ` 也是一个常规的序列化器(与上一章的 ` Serializer ` 类似) ,不同的是它额外做了些工作:
35
+ ` ModelSerializer ` 的功能与上一章的 ` Serializer ` 基本一致 ,不同的是它额外做了些工作:
36
36
37
37
- 自动推断需要序列化的字段及类型
38
38
- 提供对字段数据的验证器的默认实现
@@ -62,11 +62,11 @@ class ArticleListSerializer(serializers.ModelSerializer):
62
62
]
63
63
```
64
64
65
- 很简洁的达到了预期的功能 。
65
+ 可以看到 Json 数据仅包含 ` fields ` 中规定的字段了 。
66
66
67
67
## APIView
68
68
69
- 除了对序列化器的支持以外,` REST framework ` 库还提供了对视图的扩展 ,以便视图更好的为接口服务。
69
+ 除了对序列化器的支持以外,DRF 还提供了对视图的扩展 ,以便视图更好的为接口服务。
70
70
71
71
将文章的视图修改为如下:
72
72
@@ -93,32 +93,32 @@ def article_list(request):
93
93
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST )
94
94
```
95
95
96
- 主要的变化 :
96
+ 主要的变化如下 :
97
97
98
- - ` @api_view ` 装饰器将视图允许接收 ` GET ` 、` POST ` 请求,以及提供如 ` 405 Method Not Allowed ` 等默认实现,以便在不同的请求下进行正确的响应。
98
+ - ` @api_view ` 装饰器允许视图接收 ` GET ` 、` POST ` 请求,以及提供如 ` 405 Method Not Allowed ` 等默认实现,以便在不同的请求下进行正确的响应。
99
99
- 返回了 ` Response ` ,该对象由 Django 原生响应体扩展而来,它可以根据** 内容协商** 来确定返回给客户端的正确内容类型。如果数据验证有误,还可以返回适当的状态码以表示当前的情况。
100
100
101
- 不需要再做别的工作了。让我们刷新文章列表页面 :
101
+ 让我们刷新文章列表接口 :
102
102
103
103
![ ] ( http://blog.dusaiphoto.com/drf-1.png )
104
104
105
- 出现了可视化的接口界面!不是说好只返回数据吗 ,这是在搞毛?
105
+ 出现了可视化的接口界面!不是说好接口只返回数据吗 ,这是在搞毛?
106
106
107
107
这就是视图中 ` Response ` 提供的** 内容协商** 能力了。也就是说,Django 后端根据客户端请求响应的内容类型不同,自动选择适合的表现形式;浏览器请求资源时,就返回可视化的 HTML 资源表示,其他形式请求时,又可以返回 Json 纯数据的形式。这给开发带来极大的方便。
108
108
109
109
有同学就问了,那我怎么验证它是不是真的会返回 Json 数据呢?让我们发一个网络请求试试看。
110
110
111
- 在命令行中发送请求就要推荐 [ httpie] ( https://github.com/jakubroztocil/httpie#installation ) 这个库了 ,基于 Python 并且小巧美观。
111
+ 在命令行中发送请求,笔者推荐 [ httpie] ( https://github.com/jakubroztocil/httpie#installation ) 这个库 ,基于 Python 并且小巧美观。
112
112
113
113
重新打开一个命令行,安装方式就是万能的 ` pip ` :
114
114
115
- > 安装 httpie 可以在全局,因为 web 项目都可以用得上 。
115
+ > httpie 可以安装在全局 。
116
116
117
- ``` python
117
+ ``` bash
118
118
pip install httpie
119
119
```
120
120
121
- 安装成功后,立马试试在命令行提交一个请求 :
121
+ 安装成功后,试试在命令行提交一个请求 :
122
122
123
123
``` python
124
124
C:\...> http http://127.0.0.1:8000/api/article/
@@ -153,7 +153,7 @@ Content-Type: application/json
153
153
``` python
154
154
C:\...> http POST http://127.0.0.1:8000/api/article/ title=PostByJson body=HelloWorld!
155
155
156
-
156
+ # 以下为返回内容
157
157
HTTP / 1.1 201 Created
158
158
...
159
159
{
@@ -163,13 +163,13 @@ HTTP/1.1 201 Created
163
163
}
164
164
```
165
165
166
- 浏览文章列表、新建文章功能就完成了 。
166
+ 浏览文章列表、新建文章接口就完成了 。
167
167
168
168
## 注意事项
169
169
170
170
教程为了简洁,后续发送 web 请求会采用 httpie 为主、可视化页面为辅的方式进行开发测试。
171
171
172
- 但是使用 httpie 需要一定的学习成本(并且在 Windows 命令行下有符号兼容的坑),** 因此本教程的读者更推荐使用 [ Postman] ( https://www.postman.com/downloads/ ) ** ,可视化界面,会点鼠标就会用,比较方便 。
172
+ 但是使用 httpie 需要一定的学习成本(并且在 Windows 命令行下有符号兼容的坑),** 因此本教程的读者更推荐使用 [ Postman] ( https://www.postman.com/downloads/ ) ** ,可视化界面,会点鼠标就会用,很方便 。
173
173
174
174
> 使用 Postman 时要注意,在 Json 中单双引号含义是不同的,不要混用。
175
175
0 commit comments