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. Hexo 博客部署到 GitHub

    本文简单记录了一下把 Hexo 部署到 GitHub 上的过程,也是搭建静态博客最常用的一种方式. 前面写了关于如何把 Hexo 安装在树莓派上的教程,但树莓派毕竟是连着自己的家的路由器,万一哪天网断 ...

  2. Python3 初识Python

    一 Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  3. 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 ...

  4. xml解析标签

    //获取两个标签之间的值 private static string GetStr(string message, string strStart, string strEnd) { ; ; star ...

  5. vue2.0中改变了数组值不能实时反映到页面

    页面中点击事件checkContent,改变row数组中的row[99]的值,如果注释更改,那么页面是不能实时获取的,如图更改,则可以 具体原理:http://blog.csdn.net/websof ...

  6. JS判断页面是否加载完成

    用 document.readyState == "complete" 判断页面是否加载完成 传回XML 文件资料的目前状况. 基本语法intState = xmlDocument ...

  7. 【题解】NOI2009管道取珠

    又是艰难想题的一晚,又是做不出来的一题 (:д:) 好想哭啊…… 这题最关键的一点还是提供一种全新的想法.看到平方和这种东西,真的不好dp.然而我一直陷在化式子的泥潭中出不来.平方能够联想到什么?原本 ...

  8. BZOJ3295: [Cqoi2011]动态逆序对 莫队

    这个用莫队做会被卡,但是我还是...... 收获在于树状数组维护后缀和以及双维排序...... 莫队的时间复杂度比想象中的要好一些.... 然而我还是被卡了...... #include<ios ...

  9. HDU3488:Tour(KM算法)

    Tour Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  10. 用JSR的@Inject代替@Autowired完成自动装配

    从spring3.0开始spring支持JSR-330 的标准注解.主要是javax.inject这个包下的: 下面的例子用@Inject代替@Autowired.完成自动装配: MovieFinde ...