详解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根据出生年份简单计算生肖的方法
Mar 27 Python
python中实现精确的浮点数运算详解
Nov 02 Python
python实现定时提取实时日志程序
Jun 22 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
pandas 将索引值相加的方法
Nov 15 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
May 07 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
简单了解django索引的相关知识
Jul 17 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
基于Python中random.sample()的替代方案
May 23 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
PHP错误处理函数
2016/04/03 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Django分页功能的实现代码详解
2019/07/29 Python
python 初始化一个定长的数组实例
2019/12/02 Python
python实现canny边缘检测
2020/09/14 Python
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
高级护理专业毕业生推荐信
2013/12/25 职场文书
父母对孩子的寄语
2014/04/09 职场文书
班主任对学生的评语
2014/04/26 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
党委工作总结2015
2015/04/27 职场文书
民间借贷被告代理词
2015/05/23 职场文书
焦裕禄观后感
2015/06/03 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书