详解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 20 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
python找出完数的方法
Nov 12 Python
python3用PIL把图片转换为RGB图片的实例
Jul 04 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
Python tkinter常用操作代码实例
Jan 03 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
python查看矩阵的行列号以及维数方式
May 22 Python
python中数组和列表的简单实例
Mar 25 Python
Python+DeOldify实现老照片上色功能
Jun 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
php中的数组操作函数整理
2008/08/18 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
说一说Python logging
2016/04/15 Python
利用python批量修改word文件名的方法示例
2017/10/17 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
Python代码中如何读取键盘录入的值
2020/05/27 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
数控技术学生的自我评价
2014/02/15 职场文书
环保倡议书100字
2014/05/15 职场文书
五年级学生评语大全
2014/12/26 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
Python 多线程处理任务实例
2021/11/07 Python
linux目录管理方法介绍
2022/06/01 Servers