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. Nginx 正则匹配

    目录 Nginx 正则表达式之匹配操作符 过期缓存 针对浏览器 针对文件类型 针对文件夹 判断文件,文件夹 设置某些类型文件的浏览器缓存时间 匹配到所有uri 全局变量 常用正则 Nginx 正则表达 ...

  2. Tornado教程目录

    第一章:引言 第二章:表单和模板 第三章:模板扩展 第四章:数据库 第五章:异步Web服务 第六章:编写安全应用 第七章:外部服务认证 第八章:部署Tornado

  3. JAVA锁机制(上)

    在实际开发中经常会用到多线程协作来处理问题,锁是处理线程安全不可缺少的机制.在JAVA中可以通过至少三种方式来实现线程锁. 1.  synchronized修饰符,这种锁机制是虚拟机实现的一种锁. 2 ...

  4. Mybatis出现参数错误Parameter 'cateCode_search' not found. Available parameters are [3, 2, 1, 0, param1, param2, 5, param3, 4, param4, param5, param6]

    1.参数改为序号 2.在mybatis借口上加@Param注解

  5. POJ 3414 dfs 回溯

    题目链接:http://poj.org/problem?id=3414 题意:三个值A, B, C, A和B是两个杯子的容量,问最短操作数使A或者B里的水量是C.有三种操作. 思路:dfs.暴力 很简 ...

  6. jQuery实现的手机发送验证码倒计时效果代码分享

    这是一款基于jquery实现的手机发送验证码倒计时效果代码,可实现实时显示秒数倒计时的功能,还可实现对手机号码格式验证的功能,是一款常用的网站注册发送手机验证码特效代码. 效果描述:注册一个网站,当需 ...

  7. Nginx笔记02-nginx常用参数配置说明

    nginx的主配置文件是nginx.conf,这里主要针对这个文件进行说明 1.主配置文件nginx.conf   2.nginx配置文件的结构 从上面的配置文件中我们可以总结出nginx配置文件的基 ...

  8. LR 解压缩函数(wgzMemDecompressBuffer)失败 Code=-5

    用LR做压力测试的时候有时会报错 “解压缩函数(wgzMemDecompressBuffer)失败 返回Code=-5”. Google了一把,也没有解决掉. 因为有些脚本运行时没有问题,感觉可能和请 ...

  9. JS中的phototype详解

    作者:轩脉刃 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 ...

  10. train validation test

    http://stats.stackexchange.com/questions/19048/what-is-the-difference-between-test-set-and-validatio ...