详解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中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
浅谈tensorflow中张量的提取值和赋值
Jan 19 Python
Jupyter notebook如何实现指定浏览器打开
May 13 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 Python
Python 一键获取电脑浏览器的账号密码
May 11 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函数utf8转gb2312编码
2006/12/21 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Windows下python3.7安装教程
2018/07/31 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
Python中请不要再用re.compile了
2019/06/30 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python sorted对list和dict排序
2020/06/09 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
家居饰品店创业计划书
2014/01/31 职场文书
捐款倡议书范文
2014/02/02 职场文书
数学国培研修感言
2014/02/13 职场文书
运动会800米加油稿
2014/02/22 职场文书
中学生英语演讲稿
2014/04/26 职场文书
运动会新闻报道稿
2015/07/22 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
《风娃娃》教学反思
2016/02/18 职场文书