详解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里将list中元素依次向前移动一位
Sep 12 Python
Windows下实现Python2和Python3两个版共存的方法
Jun 12 Python
深入解析Python中的上下文管理器
Jun 28 Python
Python正则表达式完全指南
May 25 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
Python中协程用法代码详解
Feb 10 Python
将Django项目部署到CentOs服务器中
Oct 18 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
什么是python的必选参数
Jun 21 Python
python uuid生成唯一id或str的最简单案例
Jan 13 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
mysql 搜索之简单应用
2007/04/27 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python字典基本操作实例分析
2015/07/11 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
Python装饰器语法糖
2019/01/02 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
《蓝色的树叶》教学反思
2014/02/24 职场文书
实习指导老师评语
2014/04/26 职场文书
工地安全质量标语
2014/06/07 职场文书
项目合作协议书
2014/09/23 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
python如何获取网络数据
2021/04/11 Python