详解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 21 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
处理Python中的URLError异常的方法
Apr 30 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
tensorflow识别自己手写数字
Mar 14 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
Pycharm 安装 idea VIM插件的图文教程详解
Feb 21 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
python给list排序的简单方法
Dec 10 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
在VS2008中编译MYSQL5.1.48的方法
2010/07/03 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
python在linux中输出带颜色的文字的方法
2014/06/19 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
简单了解django orm中介模型
2019/07/30 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
网游商务专员求职信
2013/10/15 职场文书
升职演讲稿范文
2014/05/23 职场文书
个人先进材料范文
2014/12/30 职场文书
卖车协议书范文
2016/03/23 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL