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 ...
随机推荐
- 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 ...
- 软工实践Beta冲刺(1/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- Linux的常用目录学习笔记
首先,先查看一下Linuxi的一级目录结构: ls: /:表示根目录,文件系统的入口,最高一级目录. bin和sbin:命令保存目录,bin是普通用户能,sbin是root用户用的:/bin存放着系统 ...
- C - 最长公共子序列
C - 最长公共子序列 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem De ...
- windows下Memcached 架设及java应用(转)
1 Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可 ...
- iOS进阶--提高XCode编译速度、Xcode卡顿解决方案
提升编译链接的速度主要有以下三个方式: 1. 提高XCode编译时使用的线程数 defaults write com.apple.Xcode PBXNumberOfParallelBuildSubta ...
- P3032 [USACO11NOV]二进制数独Binary Sudoku
题目描述 Farmer John's cows like to play an interesting variant of the popular game of "Sudoku" ...
- win7中输入文件夹首字母跳到相应的文件或者文件夹,却在搜索栏出现输入的字母
组织->文件夹和搜索选项->查看->在视图中选择键入项
- [bzoj] 2694 Lcm || 莫比乌斯反演
原题 定义整数a,b,求所有满足条件的lcm(a,b)的和: 1<=a<=A 1<=b<=B ∀n>1,n2†gcd(a,b)(即任意n>1,\(n^2\)不是gc ...
- codevs 1191 线段树 区间更新(水)
题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[Li,Ri]这些点染成白色.请输出每个操作执行后剩余黑色点的个数. ...