django restful 请求_利用 Django REST framework 构建 RESTful Web API
利用 Django REST framework 构建 RESTful Web API
终于到了动手操作的环节啦,这一节,我们以师生管理系统为例,带领大家搭建一套 framework Web API。“工欲善其事,必先利其器”,我们选用当下最为流行的 Django REST framework 为工具,快速实现这套API。
安装 Django REST framework 需要以下依赖:
Python (3.5, 3.6, 3.7, 3.8)
Django (1.11, 2.0, 2.1, 2.2, 3.0)
Django REST framework是以 Django 扩展应用的方式提供的,所以我们可以直接利用已有的Django环境而无需重新创建。(若没有Django环境,需要先创建环境安装Django)
1. 安装 Django REST framework
django 安装过程:
django-rest-framework 安装过程:
2.创建工程和应用
工程和应用创建完成后,目录结构如下图所示:
3. 注册rest_framework应用
Django REST framework 可视作是 Django 的一个应用,在使用之前,需要在 INSTALLED_APPS 中注册。
在完成以上操作后,就可以使用 Django REST framework 开发 Restful Web API 了。接下来,我们将以学生管理系统为例,带大家一览 Django REST framework 如何高效开发 REST API。
4.创建、迁移模型,并添加数据
构建数据模型,是搭建 Restful Web API 的基础。构建模型,相当于构建数据库结构,且无需繁琐的 SQL 语言,另一个好处是,即使切换不同的数据库引擎(mysql 、SQL Server、Oracle等),也无需重新构建。下方我们构建一个学生信息表,包含学生姓名、学生年龄和学号。
终端中运行命令以迁移模型
向数据库中添加演示数据,这里我们可以使用 PyCharm 自带的 Database 工具来完成。由于我们使用的是sqlite3 作为数据库,添加数据时,可双击左侧文件目录中的 db.sqlite3 文件,而后在右侧 Database 工具中双击要操作的数据表(AppDemo_studentsmodel)。
在打开的数据表中,填入要填充的数据即可:
5. 创建序列化器
通常,API 包含两个方向的操作,其一是客户端向服务器请求数据,其二是客户端向服务器提交数据。当客户端向服务器请求数据时,服务器在数据库检索相应数据,经过序列化器序列化,再由视图交给客户端;客户端向服务器提交数据时,数据经由视图层进行处理,而后序列化器反序列化,最后存入数据库。
在 Restful Web API 中,序列化器相当于客户端和数据库之间数据对接的桥梁,它可将服务器中的数据,序列化为客户端可解析的数据形式,相反,也可将客户端提供的数据,反序列化为符合数据库要求的数据形式。接下来,我们在 AppDemo 应用中新建 serializers.py 用于保存该应用的序列化器。
创建一个 StudentsSerializer 用于序列化与反序列化学生信息:
model :指明该序列化器处理的数据字段从模型类 StudentsModel 参考生成;
fields :指明该序列化器包含模型类中的哪些字段,’all’指明包含所有字段。
5. 编写视图
在 Restful Web API 中,视图扮演的角色是数据处理器。例如,客户端需要获取一个学生一次期末考试后各科成绩的平均值,而数据库中仅存了各科的成绩,这时,就需要视图对数据处理,根据各科成绩求出平均值后返回给客户端。由于本案例无需对数据进行处理,视图实现较为简单。在 booktest 应用的 views.py 中创建视图 BookInfoViewSet,这是一个视图集合。
queryset 指明该视图集在查询数据时使用的查询集;
serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器。
6. 定义路由
路由是用来定义 RESTful Web API 不同接口所对应的不同路径地址。在本案例中,我们是要获得学生的信息,根据第 3 节中介绍的设计规范,地址应设计为:http://www.demo.com/api/students 。在 ProjectDemo 的 urls.py 中定义路由信息。
8. 运行测试
终端中运行当前程序(与运行 Django 一样):
此时,我们的 RESTful Web API 已构建完毕。由于我们是在本地测试,所以 API 域名部分采用本机地址。在浏览器地址栏输入 http://127.0.0.1:8000/api,即可看到当前项目中所有接口连接。
在页面底部的表单中,我们可以输入学生信息,点击 POST 按钮,即可实现向学生列表中添加新的学生信息:
点击 POST 按钮后,返回如下信息:
此时再点击 GET 按钮,我们发现上一步中添加的学生(小白)已经显示在所有学生信息中。
在浏览器中输入网址 127.0.0.1:8000/api/students/2/,可以访问获取单个学生信息的接口(id 为 2 的学生),如下图所示:
如果需要修改该学生的信息,可在页面底部表单中填写需要修改的信息,即可访问修改单个学生的接口。我们将小红年龄修改为 20:
点击 PUT,返回如下页面信息,此时小红的年龄信息已经修改完毕:
点击 DELETE 按钮,可以访问删除学生的接口:
点 DELETE 后返回,如下页面,此时 id 为 2 的学生小红已被删除:
9.小结
本节主要讲解了 Django 和 Django REST framework 安装方法,并利用 Django REST framework 实现了一个简单的学生管理系统 RESTful Web API。至此,一个符合 RESTful 规范的简单 API 就创建完成了。除此之外,Django REST framework 还为我们提供了许多高级功能,我们将在后续小节为大家详细介绍。
django restful 请求_利用 Django REST framework 构建 RESTful Web API相关推荐
- python django开发工具_利用pyCharm编辑器创建Django项目开发环境-python开发工具第一篇...
[前置说明] 1.django环境与python对应关系: Django version Python versions 1.11 2.7, 3.4, 3.5, 3.6, 3.7 (added in ...
- django oracle 性能,4.利用Django在前端展示Oracle 状态趋势
利用Django在前端展示Oracle 状态趋势 2017-12-15 Python 宅必备 开发环境 操作系统:CentOS 7.4 Python版本 :3.6 Django版本: 1.10.5 操 ...
- django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能
第一步:编写增删查改功能代码 打开项目myweb目录下view.py, 并编写以下代码 view.py from django.shortcuts import render, redirect fr ...
- asp编程工具_使用ASP.NET Core构建RESTful API的技术指南
译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术文章<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...
- 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!
[CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...
- Linux -- 利用IPS(***防御系统) 构建企业Web安全防护网
一.IPS系统简介 (应用层上应用) 防火墙只在网络层上应用,IPS 和防火墙相比,检测及过滤功能更为强大,它通过串联在网络主干线路上,对防火 墙所不能过滤的***进行过滤.这样一个两级的过滤模式,可 ...
- 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现
概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...
- rap2检测哪些接口在使用_使用RAP2和Mock.JS实现Web API接口的数据模拟和测试
最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微 ...
- python django博客源码_利用Django实现一个博客(附全部源码)
不论什么语言,学Web开发必做的项目--个人博客. 本次项目基于Python的知名Web框架Django,从数据库到视图逻辑.再到模板语法,完整的走了一遍MTV开发流程. markdown非常适合写博 ...
最新文章
- 稀疏矩阵快速转置核心代码
- Linux服务器优化(转)
- 解决JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer问题
- 解决SQL server2005数据库死锁的经验心得
- vim在每行行首或行尾添加/删除内容
- Leetcode--144. 二叉树的前序遍历(迭代递归)
- crf的实现 keras_你的 CRF 层的学习率可能不够大
- Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
- Migrations有两个文件迁移数据的方法
- matlab与maple互联,编程语言与Maple联合使用教程
- 一阶梯度法、二阶段梯度法、牛顿法
- 十款免费数据恢复软件
- Unicode与中文互转(反斜杠u(\u)开头的16进制Unicode编码转换成中文汉字
- 【面试概率】52张扑克牌,红桃A和黑桃A同时被一个人拿到的概率
- linux中来宾用户权限,linux权限分配
- 微信群发频繁发送消息,请稍后再试?
- 使用Dir函数遍历文件和目录
- 七个不良习惯导致攻击者轻松入侵数据库
- 阿里妈妈广告进入联合早报网
- MediaPlayer详解