RESTful风格的要求:https://www.cnblogs.com/chichung/p/9933116.html

利用django原生的框架直接做RESTful的API开发是怎样的呢?感受一下:

import json
from django.http import JsonResponse, HttpResponse
from django.views import View
from user.models import Department class DepartmentListAPIView(View):
def get(self,request):
"""查询所有部门 GET /departments/""" query_set = Department.objects.all()
department_list = []
for i in query_set:
department_list.append({"id":i.id,"name":i.name,"create_date":i.create_date})
# JsonResponse 可以把字典、列表转换为json.但是转换列表时需要指定,safe=False
return JsonResponse(department_list,safe=False) def post(self,request):
"""新增一个部门
restful要求url地址是/departments
要求成功返回的状态码是201(创建成功)
要求返回新生成的资源的对象"""
json_str = request.body.decode() # 二进制-->json字符串
data_dict = json.loads(json_str) # json字符串-->字典
# 校验参数(略)
department = Department()
department.name = data_dict["name"] # 字典获取值,[]或者.get(key)
department.save() # 字典-->对象
dict_data = { # 对象-->字典
"id":department.id,
"name":department.name,
"create_date":department.create_date,
"is_delete":department.is_delete
}
return JsonResponse(dict_data,status=201) # 字典-->json字符串 class DepartmentDetailAPIView(View):
def get(self,request,pk):
"""查询一个部门"""
department = Department.objects.get(id=pk) # 对象
# 对象转化为字典
date_dict = {
"id":department.id,
"name":department.name,
"create_date":department.create_date,
"is_delete":department.is_delete
}
return JsonResponse(date_dict) # 字典-->json字符串 def put(self,request,pk):
"""
修改一个部门 PUT /departments/<pk>/
:param pk: 主键,部门id
"""
json_str = request.body.decode() # 二进制-->json字符串
data_dict = json.loads(json_str) # json字符串-->字典
# 校验参数(略)
department = Department.objects.get(id=pk) # 获取要修改的对象
department.name = data_dict.get("name")
department.create_date = data_dict.get("create_date")
department.save()
# restful要求put方法返回修改的对象的全部属性
data_dict = { # 对象-->字典
"id":department.id,
"name":department.name,
"create_date":department.create_date,
"is_delete":department.is_delete
}
return JsonResponse(data_dict,status=200) def delete(self,request,pk):
"""删除一个部门"""
count = Department.objects.get(id=pk).delete()
if count == 0:
return HttpResponse(status=404)
return HttpResponse(status=204) # restful要求删除成功返回204状态码

同时,urls的设置也要restful一点:

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^departments$',views.DepartmentListAPIView.as_view()),
url(r'^departments/(?P<pk>\d+)$',views.DepartmentDetailAPIView.as_view())
]

结论:太麻烦了,还是得用 Django REST Framework啊。

django框架实现restful风格的API开发的更多相关文章

  1. 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架

    一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...

  2. DRF框架之使用Django框架完成后端接口(API)的定义

    学习DRF框架,首先我们就需要明白为什么要学习这个框架. 接下来我们就先用原生的Django框架来定义一个符合RESTful设计方法的接口(API). RESTful接口的需求如下: GET /boo ...

  3. PHP实现RESTful风格的API实例(三)

    接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...

  4. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  5. PHP实现Restful风格的API

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  6. restful风格的API

    在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...

  7. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  8. Gin实战:Gin+Mysql简单的Restful风格的API

    我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...

  9. Dubbo 03 Restful风格的API

    目录 Dubbo03 restful风格的API 根路径 协议 版本 用HTTP协议里的动词来实现资源的增删改查 用例 swagger(丝袜哥) OpenAPI 资源 编写API文档 整合Spring ...

随机推荐

  1. DFS(6)——hdu1342Lotto

    一.题目回顾 题目链接:Lotto Sample Input 7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0 Sample Output 1 2 3 4 5 6 1 2 ...

  2. 利用calibre抓取新闻

    Adding your favorite news website calibre has a powerful, flexible and easy-to-use framework for dow ...

  3. python3 urllib和requests模块

    urllib模块是python自带的,直接调用就好,用法如下: 1 #处理get请求,不传data,则为get请求 2 import urllib 3 from urllib.request impo ...

  4. qemu的device参数解释 包括socket的一些知识

    前面一片是driver,是把这个新的设备“插入到虚机中”,device 是准备驱动了.device 都是和设备配合使用的.要怎么去驱动一个设备,包括使用的驱动函数是啥,device后面的函数根据驱动的 ...

  5. perf 对两个map是否重叠的判断,以及函数map_groups__fixup_overlappings代码逻辑

    该标题可以抽象出来的问题是:两个前开后闭的区间 rangeA 和 rangeB,如何判断这两个区间是否重叠.这个问题在内核中非常重要,虚拟地址空间的划分需要它,perf中map_group的构建也需要 ...

  6. linux mysql 链接数太小

    Data source rejected establishment of connection,  message from server: "Too many connections&q ...

  7. 【bzoj4517】[Sdoi2016]排列计数 组合数+dp

    题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 满足条 ...

  8. PyQt5学习--基本窗口控件--QMainWindow

    QMainWindow主窗口为用户提供一个应用程序框架,它有自己的布局,可以在布局中添加控件.比如将工具栏.菜单栏和状态栏等添加到布局管理器中. 窗口类型介绍 QMainWindow.QWidget和 ...

  9. 洛谷 P2414 [NOI2011]阿狸的打字机 解题报告

    P2414 [NOI2011]阿狸的打字机 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母 ...

  10. 《软件调试的艺术》学习笔记——GDB使用技巧摘要

    <软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. ...