对Django的restful用法详解(自带的增删改查)


Posted in Python onAugust 28, 2019

什么是rest

REST是所有Web应用都应该遵守的架构设计指导原则。

Representational State Transfer,翻译是”表现层状态转化”。

面向资源是REST最明显的特征,对于同一个资源的一组不同的操作。资源是服务器上一个可命名的抽象概念,资源是以名词为核心来组织的,首先关注的是名词。

REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。

GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT(PATCH)用来更新资源,DELETE用来删除资源。

api定义规范

http://xxx.com/api/

资源

在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数。

举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

https://api.example.com/v1/zoos

https://api.example.com/v1/animals

https://api.example.com/v1/employees

http请求方式

GET(SELECT):从服务器取出资源(一项或多项)

POST(CREATE):在服务器新建一个资源

PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)

PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)

DELETE(DELETE):从服务器删除资源

filter过滤

?page=2&per_page=100:指定第几页,以及每页的记录数。

?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。

?animal_type_id=1:指定筛选条件

状态码

服务端向用户返回请求api的结果,在结果中包含了status codes 状态码的,可以通过状态码去判断请求api的状态是成功还是失败

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

204 NO CONTENT - [DELETE]:用户删除数据成功。

400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

具体用法

更多的需要配合postman 因此需要下载一个postman,方便更多的操作

https://www.getpostman.com/apps

使用之前安装模块

pip install djangorestframework 
pip install django-filter

在setting.py中加入参数

INSTALLED_APPS中加入'rest_framework',

在app中创建一个py文件——序列化文件

比如serializers.py然后写入restful
from rest_framework import serializers
from stu.models import Student(导入自己写的app、models)


class StudentSerializer(serializers.ModelSerializer):

  class Meta:
    # 关联数据表(前面不是变量名)
    model = Student
    # 确定需要序列化的字段(返回给用户的具体表中的字段)(前面不是变量名)
    fields = ['id', 's_name', 's_tel']

  def to_representation(self, instance):

    data = super().to_representation(instance)

    try:
      # 得到关联表中的字段,必须用try,否则如果存在一个没有定义i_addr的学生时,系统将报错
      data['s_addr'] = instance.studentinfo.i_addr
    except Exception as e:
      data['s_addr'] = ''

    return data

在app中views中创建类

from rest_framework import mixins,viewsets
from stu.serializers import StudentSerializer
from stu.models import Student


class StudentEdit(mixins.ListModelMixin,# 表示可以在Postman类似的软件中只能查找所有数据
         viewsets.GenericViewSet,
         mixins.RetrieveModelMixin, # 表示可以在Postman类似的软件中只能查找单一数据
         mixins.UpdateModelMixin,  # 表示可以在Postman类似的软件中更新数据
         mixins.DestroyModelMixin,  # 表示可以在Postman类似的软件中删除数据
         mixins.CreateModelMixin):  # 表示可以在Postman类似的软件中创建数据

  # 查询所有信息
  queryset = Student.objects.all()
  # 序列化
  serializer_class = StudentSerializer

对Django的restful用法详解(自带的增删改查)

创建urls

这里同时展示了urls不一定每次都写入进去可以用+=添加进去

注意这里写的urls不要加‘/'他会自动加载

from stu import views
from rest_framework.routers import SimpleRouter

router = SimpleRouter()
router.register(r'student', views.StudentEdit)

urlpatterns = [
  # 其他url
]

urlpatterns += router.urls #这里表示添加定义的url

对Django的restful用法详解(自带的增删改查)

对应的方法

在postman中选入某个参数然后传入某个urls即可

增: POST http://127.0.0.1:8080/stu/addStu/1/

删: DELETE http://127.0.0.1:8080/stu/addStu/1/

改: UPDATE http://127.0.0.1:8080/stu/addStu/1/

查: GET http://127.0.0.1:8080/stu/addStu/1

能执行这些操作前都需要在views中定义好才行

以上这篇对Django的restful用法详解(自带的增删改查)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
树莓派中python获取GY-85九轴模块信息示例
Dec 05 Python
Python中使用hashlib模块处理算法的教程
Apr 28 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
python3转换code128条形码的方法
Apr 17 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
简单了解Python多态与属性运行原理
Jun 15 Python
Python selenium模块实现定位过程解析
Jul 09 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python中Selenium库使用教程详解
Jul 23 Python
pyspark对Mysql数据库进行读写的实现
Dec 30 Python
Python实现简繁体转换
Jun 07 Python
Python closure闭包解释及其注意点详解
Aug 28 #Python
python opencv调用笔记本摄像头
Aug 28 #Python
Python threading的使用方法解析
Aug 28 #Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 #Python
Python logging设置和logger解析
Aug 28 #Python
Python shelve模块实现解析
Aug 28 #Python
解决python明明pip安装成功却找不到包的问题
Aug 28 #Python
You might like
BBS(php & mysql)完整版(三)
2006/10/09 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
python 写的一个爬虫程序源码
2016/02/28 Python
python万年历实现代码 含运行结果
2017/05/20 Python
python实现数据图表
2017/07/29 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python实现键盘控制鼠标移动
2020/11/27 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
初中优秀班集体申报材料
2014/05/01 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
Ajax实现三级联动效果
2021/10/05 Javascript
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis