详解Django rest_framework实现RESTful API


Posted in Python onMay 24, 2018

一、什么是REST

面向资源是REST最明显的特征,资源是一种看待服务器的方式,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。

与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。对某个资源感兴趣的客户端应用,可以通过资源的URI与其进行交互。对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。

REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。(7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)

二、什么是RESTful

API符合REST架构设计的API。

概念不多说了,具体通过下面的一个简单例子看看Django框架是怎么实现RESTful。

三、rest_framework模块

1.使用pip命令下载:pip3 install djangorestframework

详解Django rest_framework实现RESTful API

2.新建一个Django项目

详解Django rest_framework实现RESTful API

详解Django rest_framework实现RESTful API

3.创建一个apitest APP

cd d:\Tool           # 切换到Tool目录
python manage.py startapp apitest  #创建apitest应用

目录结构:

详解Django rest_framework实现RESTful API

4.打开settings.py,增加一段配置:

INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'apitest',              #添加apitest app
  'rest_framework',          #添加rest_framework
]


#增加一段REST_FRAMEWORK配置
REST_FRAMEWORK = {
  # Use Django's standard `django.contrib.auth` permissions,
  # or allow read-only access for unauthenticated users.
  'DEFAULT_PERMISSION_CLASSES': [
    'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
  ],
  'DEFAULT_RENDERER_CLASSES': (
    'rest_framework.renderers.JSONRenderer',
  ),
  'DEFAULT_PARSER_CLASSES': (
    'rest_framework.parsers.JSONParser',
  )
}

5.在apitest目录下新建一个api.py,让我们来写一些测试代码:

#coding=utf-8
from rest_framework import permissions
from rest_framework.response import Response
from rest_framework.decorators import api_view, permission_classes
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
@api_view(http_method_names=['post'])        #只允许post
@permission_classes((permissions.AllowAny,))
def inventory(request):
  parameter = request.data
  id = parameter['data']
  if id == 1:
    data = 'There are three dogs'
  elif id == 2:
    data = 'There are two dogs'
  else:
    data = 'nothing'
  return Response({'data':data})

6.在urls.py添加刚刚创建的api路由:

urlpatterns = [
  path('admin/', admin.site.urls),
  path('food/', api.inventory),        #添加api中inventory路由
]

上面配置好了之后本地调试下,输入命令:python manage.py runserver 8000

详解Django rest_framework实现RESTful API

好了,服务器端代码已经写完。我们可以通过约定好的名词food来获取或者更改资源。然后写个小脚本测试下上面的接口:

import requests

url= 'http://127.0.0.1:8000/food/'
data = {'data':2}
h=requests.post(url,json=data)
print(h.text)

输出:

详解Django rest_framework实现RESTful API

测试OK

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
python使用mysql的两种使用方式
Mar 07 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
Jun 16 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
python怎么对数字进行过滤
Jul 05 Python
Python 创建守护进程的示例
Sep 29 Python
Python中Selenium模块的使用详解
Oct 09 Python
利用Python实现模拟登录知乎
May 25 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 #Python
matplotlib 输出保存指定尺寸的图片方法
May 24 #Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 #Python
在Django中输出matplotlib生成的图片方法
May 24 #Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 #Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 #Python
好的Python培训机构应该具备哪些条件
May 23 #Python
You might like
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
layui select动态添加option的实例
2018/03/07 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
python算法题 链表反转详解
2019/07/02 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python线程中的同步问题及解决方法
2019/08/29 Python
python实现视频读取和转化图片
2019/12/10 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
python操作链表的示例代码
2020/09/27 Python
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
新闻学毕业生自荐信
2013/11/15 职场文书
农贸市场管理制度
2014/01/31 职场文书
超越自我演讲稿
2014/05/21 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
啦啦队口号大全
2014/06/16 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
恰同学少年观后感
2015/06/08 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书