利用 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相关推荐

  1. 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 ...

  2. django oracle 性能,4.利用Django在前端展示Oracle 状态趋势

    利用Django在前端展示Oracle 状态趋势 2017-12-15 Python 宅必备 开发环境 操作系统:CentOS 7.4 Python版本 :3.6 Django版本: 1.10.5 操 ...

  3. django mysql开发_基于django框架web项目实战开发四 django+mysql实现增删查改功能

    第一步:编写增删查改功能代码 打开项目myweb目录下view.py, 并编写以下代码 view.py from django.shortcuts import render, redirect fr ...

  4. asp编程工具_使用ASP.NET Core构建RESTful API的技术指南

    译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术文章<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之 ...

  5. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!

    [CSDN 编者按]"Elixir.Phoenix.Absinthe.GraphQL.React和Apollo"--在这几个关键词中,有几个是身为开发者的你一直想玩但还没来得及玩的 ...

  6. Linux -- 利用IPS(***防御系统) 构建企业Web安全防护网

    一.IPS系统简介 (应用层上应用) 防火墙只在网络层上应用,IPS 和防火墙相比,检测及过滤功能更为强大,它通过串联在网络主干线路上,对防火 墙所不能过滤的***进行过滤.这样一个两级的过滤模式,可 ...

  7. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  8. rap2检测哪些接口在使用_使用RAP2和Mock.JS实现Web API接口的数据模拟和测试

    最近一直在思考如何对Web API的其接口数据进行独立开发的问题,随着Web API的越来越广泛应用,很多开发也要求前端后端分离,例如统一的Web API接口后,Winform团队.Web前端团队.微 ...

  9. python django博客源码_利用Django实现一个博客(附全部源码)

    不论什么语言,学Web开发必做的项目--个人博客. 本次项目基于Python的知名Web框架Django,从数据库到视图逻辑.再到模板语法,完整的走了一遍MTV开发流程. markdown非常适合写博 ...

最新文章

  1. 稀疏矩阵快速转置核心代码
  2. Linux服务器优化(转)
  3. 解决JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer问题
  4. 解决SQL server2005数据库死锁的经验心得
  5. vim在每行行首或行尾添加/删除内容
  6. Leetcode--144. 二叉树的前序遍历(迭代递归)
  7. crf的实现 keras_你的 CRF 层的学习率可能不够大
  8. Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
  9. Migrations有两个文件迁移数据的方法
  10. matlab与maple互联,编程语言与Maple联合使用教程
  11. 一阶梯度法、二阶段梯度法、牛顿法
  12. 十款免费数据恢复软件
  13. Unicode与中文互转(反斜杠u(\u)开头的16进制Unicode编码转换成中文汉字
  14. 【面试概率】52张扑克牌,红桃A和黑桃A同时被一个人拿到的概率
  15. linux中来宾用户权限,linux权限分配
  16. 微信群发频繁发送消息,请稍后再试?
  17. 使用Dir函数遍历文件和目录
  18. 七个不良习惯导致攻击者轻松入侵数据库
  19. 阿里妈妈广告进入联合早报网
  20. MediaPlayer详解

热门文章

  1. python locust最新版_python locust 性能测试:locust安装和一些参数介绍
  2. 树莓派3开wifi热点
  3. 你知道吗,NukeSped 通过 Bundlore 发起了一种新型攻击
  4. 带你了解DDoS攻击的原理,让你轻松学会DDoS攻击原理及防护措施
  5. ubuntu shell实现加减乘除
  6. Mysql 查询一天中每半小时记录的数量
  7. 1、Math类的常用方法
  8. Java非线程安全问题的解决方法
  9. Acwing第 16 场周赛【未完结】
  10. JSR 303约束规则