详解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备份文件的脚本
Aug 11 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python绘制漏斗图步骤详解
Mar 04 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
Python如何将模块打包并发布
Aug 30 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
PyQt5通过信号实现MVC的示例
Feb 06 Python
教你用python实现一个无界面的小型图书管理系统
May 21 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
smarty实例教程
2006/11/19 PHP
用PHP实现的随机广告显示代码
2007/06/14 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python中decorator使用实例
2015/04/14 Python
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python 多线程Threading初学教程
2017/08/22 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
Python读取YAML文件过程详解
2019/12/30 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
大学生大二自我鉴定
2013/10/28 职场文书
怎样写演讲稿
2014/01/04 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
婚宴领导致辞
2015/07/28 职场文书