详解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实现中文输出的两种方法
May 09 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
Python中GIL的使用详解
Oct 03 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 Python
python b站视频下载的五种版本
May 27 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作为Shell脚本语言使用
2006/10/09 PHP
收藏Javascript中常用的55个经典技巧
2007/08/12 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
JavaScript中return false的用法
2015/03/12 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
寻找网站后台地址的python脚本
2014/09/01 Python
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
Python类的继承super相关原理解析
2020/10/22 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
四查四看自我剖析材料
2014/09/19 职场文书
出国签证在职证明
2014/09/20 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
应聘教师自荐信
2015/03/26 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
聊一聊python常用的编程模块
2021/05/14 Python
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技