urls:

from django.conf.urls import url
from app01 import views urlpatterns = [
# url(r"comment/$",views.Comment.as_view()),
url(r"comment/(?P<pk>\d+)",views.CommentDetailView.as_view()),
url(r"article/$",views.Article.as_view()),
url(r"school/(?P<id>\d+)",views.SchoolDetail.as_view(),name="school-detail"),
url(r"school_view/$",views.SchoolView.as_view(),name="school_view-detail"),
url(r"comment_view/$",views.CommentView.as_view(),name="comment_view-detail"),
url(r"article/(?P<pk>\d+)",views.ArticleDetail.as_view(),name="article-detail"), # url(r'comment/$',views.CommentViewSet.as_view({
# "get":"list",
# "put":"create",
# })),
#
# url(r'comment/(?P<pk>\d+)/$',views.CommentViewSet.as_view({
# "get":"retrieve",
# "put":"update",
# "delete":"destroy"
# })) ] from rest_framework.routers import DefaultRouter router = DefaultRouter()
router.register(r'comment',views.CommentViewSet)
urlpatterns += router.urls # 相当于 在urlpatterns里添加了:
# url(r'comment/$',views.CommentViewSet.as_view({
# "get":"list",
# "put":"create",
# })),
#
# url(r'comment/(?P<pk>\d+)/$',views.CommentViewSet.as_view({
# "get":"retrieve",
# "put":"update",
# "delete":"destroy"
# }))

views:此处为RESTful API 终极版:

from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
from app01 import models
from rest_framework import serializers
from django import views
from rest_framework.views import APIView
from rest_framework.response import Response
from app01 import serializers as app01_serializers
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin,CreateModelMixin,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin
from rest_framework.generics import GenericAPIView, RetrieveUpdateDestroyAPIView, ListCreateAPIView
from rest_framework.viewsets import ModelViewSet # ==================================================================
# 95天内容 # 第一种方式: # class CommentView(APIView):
# def get(self,request):
# query_set = models.Comment.objects.all()
# ser_obj = app01_serializers.CommentSerializer(query_set,many=True)
# return Response(ser_obj.data) # 使用封装类后: # class CommentView(GenericAPIView,ListModelMixin,CreateModelMixin):
"""
GenericAPIView
只需要配置
queryset 和 serializer_class 即可
""" # queryset = models.Comment.objects.all() # 指定queryset对象
# serializer_class = app01_serializers.CommentSerializer # 指定类序列化
#
# def get(self,request, *args, **kwargs):
# return self.list(request, *args, **kwargs) # list方法为 ListModelMixin内部封装的函数,其源码为:
# def list(self, request, *args, **kwargs):
# queryset = self.filter_queryset(self.get_queryset())
#
# page = self.paginate_queryset(queryset)
# if page is not None:
# serializer = self.get_serializer(page, many=True)
# return self.get_paginated_response(serializer.data)
#
# serializer = self.get_serializer(queryset, many=True)
# return Response(serializer.data)
# 其实质与之前我们使用APIView一样,
# post 同理 # def post(self,request, *args, **kwargs):
# print("评论区")
# return self.create(request, *args, **kwargs) # 评论详情: # class CommentDetailView(GenericAPIView,RetrieveModelMixin,DestroyModelMixin,UpdateModelMixin):
# queryset = models.Comment.objects.all()
# serializer_class = app01_serializers.CommentSerializer
#
# def get(self,request,pk):
# return self.retrieve(request,pk)
#
# def delete(self,request,pk):
# return self.destroy(request,pk)
#
# def perform_destroy(self, instance):
# "someting code"
# # 可以在删除之前做的一些操作
# instance.delete()
#
# def put(self,request,pk):
# return self.update(request,pk) class SchoolView(GenericAPIView,ListModelMixin):
queryset = models.Comment.objects.all()
serializer_class = app01_serializers.CommentSerializer def get(self,request,*args,**kwargs):
return self.list(request, *args,**kwargs) # 第二种方式
class CommentDetailView(RetrieveUpdateDestroyAPIView): # RetrieveUpdateDestroyAPIView 相当于封装了GenericAPIView
# RetrieveModelMixin,DestroyModelMixin,UpdateModelMixin 这四个
# 可以进行查看,更改和删除操作。
queryset = models.Comment.objects.all()
serializer_class = app01_serializers.CommentSerializer #
class CommentView(ListCreateAPIView):
# ListCreateAPIView:内封装了 ListModelMixin CreateModelMixin
queryset =models.Comment.objects.all()
serializer_class = app01_serializers.CommentSerializer # 第三种方式:
# 终极版:
class CommentViewSet(ModelViewSet):
queryset = models.Comment.objects.all()
serializer_class = app01_serializers.CommentSerializer

RESTful API终极版序列化封装的更多相关文章

  1. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  2. python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)

    昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...

  3. rest-framework 序列化格式Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  4. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载

    [Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...

  5. Django编写RESTful API(一):序列化

    欢迎访问我的个人网站:www.comingnext.cn 关于RESTful API 现在,在开发的过程中,我们经常会听到前后端分离这个技术名词,顾名思义,就是前台的开发和后台的开发分离开.这个技术方 ...

  6. HTTP请求封装:Ajax与RESTful API

    一.HTTP请求 HTTP即超文本传输协议,用以进行HTML 文件. 图片文件. 查询结果等的网络传输. 一个完整的HTTP请求包括:请求行.请求头.空行和请求数据(请求数据可以为空) HTTP1.1 ...

  7. 转:一个Restful Api的访问控制方法(简单版)

    最近在做的两个项目,都需要使用Restful Api,接口的安全性和访问控制便成为一个问题,看了一下别家的API访问控制办法. 新浪的API访问控制使用的是AccessToken,有两种方式来使用该A ...

  8. (转)RESTful API 设计最佳实践

    原文:http://www.oschina.net/translate/best-practices-for-a-pragmatic-restful-api 数据模型已经稳定,接下来你可能需要为web ...

  9. RESTful Api 身份认证安全性设计

    REST是一种软件架构风格.RESTful Api 是基于 HTTP 协议的 Api,是无状态传输.它的核心是将所有的 Api 都理解为一个网络资源.将所有的客户端和服务器的状态转移(动作)封装到 H ...

随机推荐

  1. 用JavaScript做一个小小设计

    这个项目是我无聊时完成的,参阅过很多大神的示例,其实方法并不难主要是js和css样式的设计,我发现自己还有很多的js代码写不出来更加不用提看的明白了,(PS吐槽一下:革命尚未成功,同志还需努力啊!)此 ...

  2. Rails 5 Test Prescriptions 第11章其他部分的测试。

    Routes✅ Helper Methods✅ Controllers and Requests✅ Simulating Requests⚠️,看之前的博客 What to Expect in a R ...

  3. Codeforces Round #418 (Div. 2)D

    给n个圆要么包含,要么相分离,没有两个公共点,当成一棵树,把包含的面积大的放在上面 如图最上面的par记为-1,level记为0,当par==-1||level==1时就加否则减, 就是第一,二层先加 ...

  4. Java网络编程和NIO详解3:IO模型与Java网络编程模型

    Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...

  5. h5桌面通知Notification

    H5中的桌面通知Notification 前言: 对于一个前端开发者,逛网页总会留意一些新奇的功能,对于上班总会用到Teambition的我,总是能收到Notification...所以今天就来研究下 ...

  6. asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)

    上文件传很常见,现在就文件上传利用HTML的File控件(uploadify)的,这里为大家介绍一下(uploadify)的一些使用方法.在目前Web开发中用的比较多的,可能uploadify(参考h ...

  7. Java解析Json数据的两种方式

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  8. python高级编程之列表推导式

    1. 一个简单的例子 在Python中,如果我们想修改列表中所有元素的值,可以使用 for 循环语句来实现. 例如,将一个列表中的每个元素都替换为它的平方: >>> L = [1, ...

  9. iMac 10年

    10年前,也就是1998年8月15号,Apple 推出了蓝色半透明的 iMac G3(指上市,发布时间为当年5月6号),当年销售200万台,从此开启了它的一个时代,人们一旦说起设计,那么 Apple ...

  10. localhost能连接websocket 127.0.0.1 不能连接问题?

    最近开发中遇到一个问题,就是有的浏览器电脑能连接websocket , 有的不能 , 有的能用localhost连接,有的能用127.0.0.1连接,这个问题很奇怪 提供一个很好测试websocket ...