Python全栈编程应用实战,不容错过
这是《使用Django 2.0构建Python Restful服务》第4篇
在上一章,我们介绍了使用rest-framework模块的序列化器、JSON渲染器和JSON解析器对Django模型实例进行序列化和反序列化的操作。至此,我们已经了解了如何在Django中将模型实例的数据用json数据的形式呈现出来。本章,我们将定义restful web项目的api视图函数和URL路由映射。
通过网页博客阅读,更易实践和操作
4.1 电影列表视图函数和路由映射
视图函数的定义和创建在movieapi/movies/views.py文件中进行,我们首先引入需要使用到的相关模块:
4.1.1、定义json响应类
稍微了解过Django框架的同学都知道,HttpResponse这个类返回一个字符串作为HTTP响应内容提供给浏览器。我们基于这个类,定义一个返回JSON数据作为HTTP响应内容的类:
4.1.2、定义电影列表资源的视图函数
定义好json响应类之后,我们对电影列表的资源进行视图函数的创建,在电影列表资源中,我们只有两种操作:
GET请求用于获取电影列表;
POST请求用于添加电影列表;
电影列表资源的视图函数代码如下所示:
在这个视图函数中,我们首先获取并判断http的请求方法,如果请求方法为GET,那么我们获取Movie模型的所有对象,调用序列化器MovieSerializer()对模型实例对象进行序列化,然后通过自定义的JsonResponse()类返回json数据作为HTTP响应;
如果请求方法为POST,那么我们使用json解析器JSONParser()对HTTP请求的数据进行解析,接着调用序列化器MovieSerializer()对解析后的请求数据进行序列化,如果序列化数据是有效的,那么我们调用序列化器的save()方法对数据进行保存,返回201状态码和序列化后的数据,否则返回400状态码和序列化的错误信息。
4.1.3、创建电影列表资源的路由映射
上面的电影列表资源视图函数创建好之后,我们来对其创建一条对应的url路由映射。url路由映射我们直接在moviesapi文件夹下的urls.py中进行定义:
首先,在文件中引入视图函数:
然后在urlpatterns列表中添加路由规则:
接着,在命令行终端启动django项目:
项目运行成功后,我们使用先前下载安装的Postman进行测试。先来看看GET请求的测试:
使用GET方法对/movielist进行访问,成功地返回了电影的列表。我们再来看看POST方法的添加请求:
我们使用POST请求向服务器发送了一个json格式的数据,最终服务器返回了一条创建完成的数据记录,当我们再次使用GET请求获取所有电影列表的时候,我们刚刚使用POST传递的数据已经存在于返回的电影列表数据中了。
这样,我们的电影资源列表的两个请求方法都已经没有问题,接下来我们来创建电影详情资源的API视图函数。
4.2、电影详情视图函数和路由映射
4.2.1、电影详情视图函数
继续在movies/views.py文件中创建一个视图函数用于对电影详情进行操作:
我们对这个请求接收一个pk参数来获取具体的模型实例对象,然后使用GET请求方法用于获取具体的电影资源,使用PUT请求方法用于修改具体的,使用DELETE方法删除具体的电影资源。
4.2.2、电影详情路由映射
创建好电影资源详情的视图函数之后,我们照例对其进行URL路由映射。在moviesapi/urls.py文件中添加URL路由与视图函数的映射关系:
添加完成后,urls.py中完整的代码如下:
4.2.3、测试电影详情API
下面我们继续使用Postman这个软件来测试我们定义的视图函数和路由映射的正确性。
首先来看GET请求方法获取电影详情资源。上一小节,我们在电影列表资源中新增了一个电影资源:
我们使用/movies/32/的GET请求方法来获取它,结果返回的就是这一个资源通过序列化器定义和转换的所有信息:
再使用PUT请求方法,修改一下它的某个字段的值,结果成功的修改并返回了修改后的值:
最后,我们使用DELETE请求方法对其进行删除:
成功地对这个资源进行了删除并返回204状态码。
这样,我们的两个资源的api就已经定义好了。
4.3 本章小结
在本章,我们简单地定义了电影列表和电影详情两个资源的api视图函数和url,并成功的使用Postman对其进行了测试。
【赞赏和提问】
动动手,分享公众号给更多小伙伴一起学习进步^_^
领取专属 10元无门槛券
私享最新 技术干货