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. Python图像全屏显示

    需要在嵌入式设备上全屏显示图像,使用pil显示图像时,只能通过系统的图像浏览器显示.所以使用Python自带的tkinter import Tkinter as tk   这句在Python3中已经改 ...

  2. POJ 2168 Joke with Turtles(DP)

    Description There is a famous joke-riddle for children: Three turtles are crawling along a road. One ...

  3. 学习bash——数据流重定向

    一.概述 1. 数据流 定义:以规定顺序被读取一次的数据序列. 分类:标准输入(stdin).标准输出(stdout)和标准错误输出(stderr). 标准输出:指的是命令执行所回传的正确信息. 标准 ...

  4. 并查集——poj1703(带权并查集入门)

    传送门:Find them, Catch them 题意:警察抓获N个罪犯,这些罪犯只可能属于两个团伙中的一个,现在给出M个条件(D a b表示a和b不在同一团伙),对于每一个询问(A a b)确定a ...

  5. Liz问题账户分析系统

    1.理解liz工作情况,了解liz的问题,具有同理心.设想软件应该达成的目标,解决哪些业务. 第一步:就是从系统角度来理解软件,确定对所开发系统的综合要求,并提出这些需求的实现条件,以及需求应该达到的 ...

  6. C++版本的C标准库头文件的特点

    C++标准库中除了定义C++语言特有的功能外,也兼容了C语言的标准库.C语言的头文件形如name.h,C++则将这些文件命名为cname.也就是去掉了.h后缀,而在文件名name之前添加了字母c,这里 ...

  7. PAT 1040 有几个PAT

    https://pintia.cn/problem-sets/994805260223102976/problems/994805282389999616 字符串 APPAPT 中包含了两个单词 PA ...

  8. 【SSH】——Hibernate实现简单的自动建表

    [与ORM] Object Relational Mapping,对象关系映射,将对象和关系联系了起来.面向对象是从耦合.聚合.封装等的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论 ...

  9. java-2018-01-17计划

    1.一句英语 包括单词 2.一个java版本的设计模式 参考:https://github.com/iluwatar/java-design-patterns 学习了抽象工厂模式 总结:java的RS ...

  10. Winform常用知识总结

    Label中的文字自动换行 设置MaximumSize的width为正确的值,设置height为0,设置AutoSize为true. 绘制线条 放置一个Panel,设置size的高度为1,设置Bord ...