详解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抓取Discuz!用户名脚本代码
Dec 30 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
python实现聊天小程序
Mar 13 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
python安装和pycharm环境搭建设置方法
May 27 Python
PyTorch如何搭建一个简单的网络
Aug 24 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 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函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
Yii中表单用法实例详解
2016/01/05 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
python文件操作相关知识点总结整理
2016/02/22 Python
20招让你的Python飞起来!
2016/09/27 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
python实现桌面托盘气泡提示
2019/07/29 Python
python关于调用函数外的变量实例
2019/12/26 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
十佳大学生事迹材料
2014/01/29 职场文书
学生安全责任书
2014/04/15 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
考勤制度通知
2015/04/25 职场文书
婚宴父母致辞
2015/07/27 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
Python tensorflow卷积神经Inception V3网络结构
2022/05/06 Python