django框架实现restful风格的API开发
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开发的更多相关文章
- 测开大佬告诉你:如何5分钟快速创建restful风格的API接口-使用django restframework框架
一.思考❓❔ 1.创建API接口难吗? 软件测试工程师: 只测过API接口, 从没创建过 应该需要掌握一门后端开发语言和后端开发框架吧!? 脑容量有限,想想就可怕 2.如何创建API接口呢? 使用Dj ...
- DRF框架之使用Django框架完成后端接口(API)的定义
学习DRF框架,首先我们就需要明白为什么要学习这个框架. 接下来我们就先用原生的Django框架来定义一个符合RESTful设计方法的接口(API). RESTful接口的需求如下: GET /boo ...
- PHP实现RESTful风格的API实例(三)
接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...
- PHP实现RESTful风格的API实例(一)
最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...
- PHP实现Restful风格的API
Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...
- restful风格的API
在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...
- [01] 浅谈RESTful风格的API
1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...
- Gin实战:Gin+Mysql简单的Restful风格的API
我们已经了解了Golang的Gin框架.对于Webservice服务,restful风格几乎一统天下.Gin也天然的支持restful.下面就使用gin写一个简单的服务,麻雀虽小,五脏俱全.我们先以一 ...
- Dubbo 03 Restful风格的API
目录 Dubbo03 restful风格的API 根路径 协议 版本 用HTTP协议里的动词来实现资源的增删改查 用例 swagger(丝袜哥) OpenAPI 资源 编写API文档 整合Spring ...
随机推荐
- Hexo 博客部署到 GitHub
本文简单记录了一下把 Hexo 部署到 GitHub 上的过程,也是搭建静态博客最常用的一种方式. 前面写了关于如何把 Hexo 安装在树莓派上的教程,但树莓派毕竟是连着自己的家的路由器,万一哪天网断 ...
- Python3 初识Python
一 Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- sysctl -P 报错解决办法 error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown keyerror: "net.bridge.brid ...
- xml解析标签
//获取两个标签之间的值 private static string GetStr(string message, string strStart, string strEnd) { ; ; star ...
- vue2.0中改变了数组值不能实时反映到页面
页面中点击事件checkContent,改变row数组中的row[99]的值,如果注释更改,那么页面是不能实时获取的,如图更改,则可以 具体原理:http://blog.csdn.net/websof ...
- JS判断页面是否加载完成
用 document.readyState == "complete" 判断页面是否加载完成 传回XML 文件资料的目前状况. 基本语法intState = xmlDocument ...
- 【题解】NOI2009管道取珠
又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...
- BZOJ3295: [Cqoi2011]动态逆序对 莫队
这个用莫队做会被卡,但是我还是...... 收获在于树状数组维护后缀和以及双维排序...... 莫队的时间复杂度比想象中的要好一些.... 然而我还是被卡了...... #include<ios ...
- HDU3488:Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- 用JSR的@Inject代替@Autowired完成自动装配
从spring3.0开始spring支持JSR-330 的标准注解.主要是javax.inject这个包下的: 下面的例子用@Inject代替@Autowired.完成自动装配: MovieFinde ...