django-rest-framework学习之Class-based Views--2017年4月13日

摘自:http://blog.csdn.net/ppppfly/article/details/51138085

Class-based Views

减少代码重复

提高代码重用

【1】用Class-based Views重写API

from myLesson.models import MyLesson
from myLesson.serializers import MyLessonSerializer
from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

class MyLessonList(APIView):
    """
    List all myLesson, or create a new myLesson.
    """
    def get(self,request,format=None):
        myLesson = MyLesson.objects.all()
        serializer = MyLessonSerializer(myLesson,many=True)
        return Response(serializer.data)

    def post(self,reuqest,format=None):
        serializer = Myserializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data,status=status.HTTP_201_CREATED)
        return Response(serializer.errors,stauts=status.HTTP_400_BAD_REQUEST)

class MyLessonDetail(APIView):
    """
    Retrieve,update or delete a myLesson instance.
    """
    def get_object(self,pk):
        try:
            return MyLesson.objects.get(pk=pk)
        except MyLesson.DoesNotExist:
            raise Http404

    def get(self,request,pk,format=None):
        myLesson = self.get_object(pk)
        serializer = MyLessonSerializer(myLesson)
        return Response(serializer.data)

    def put(self,request,pk,format=None):
        myLesson = self.get_object(pk)
        serializer = MyLessonSerializer(myLesson,data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

    def delete(self,request,pk,format=None):
        myLesson = self.get_object(pk)
        myLesson.delete()
        return Response(status.HTTP_204_NO_CONTENT)

from django.conf.urls import url
from myLesson import views
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
    url(r‘^myLesson/$‘,views.MyLessonList.as_view()),
    url(r‘^myLesson/(?P<pk>[0-9]+)/$‘,views.MyLessonDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)

【2】 mixins

minxin类实现了通用的http的各种方法

使用 GenericAPIView 创建了我们的视图,并且加入了 ListModelMixin 和 CreateModelMixin 。

基本类提供了核心的功能,而混入(mixin)类提供了 .list() 和 .create() 行为。然后,我们显式地在 get 和 post 方法里面,放入对应的行动。

from myLesson.models import MyLesson
from myLesson.serializers import MyLessonSerializer
from rest_framework import mixins
from rest_framework import generics

class MyLessonList(mixins.ListModelMixin,
                   mixins.CreateModelMixin,
                   generics.GenericAPIView):
    queryset = MyLesson.objects.all()
    serializer_class = MyLessonSerializer

    def get(self,request,*args,**kwargs):
        return self.list(request,*args,**kwargs)

    def post(self,request,*args,**kwargs):
        return self.create(request,*args,**kwargs)

class MyLessonDetail(mixins.RetrieveModelMixin,
                     mixins.UpdateModelMixin,
                     mixins.DestroyModelMixin,
                     generics.GenericAPIView):
    queryset = MyLesson.objects.all()
    serializer_class = MyLessonSerializer

    def get(self,request,*args,**kwargs):
        return self.retrieve(request,*args,**kwargs)

    def put(self,request,*args,**kwargs):
        return self.update(request,*args,**kwargs)

    def delete(self,request,*args,**kwargs):
        return self.destroy(request,*args,**kwargs)
 

使用基于泛类(generic class)的视图:

REST framework提供了一套已经实现了混入类的通用视图

from myLesson.models import MyLesson
from myLesson.serializers import MyLessonSerializer
from rest_framework import generics

class MyLessonList(generics.ListCreateAPIView):
    queryset = MyLesson.objects.all()
    serializer_class = MyLessonSerializer

class MyLessonDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = MyLesson.objects.all()
    serializer_class = MyLessonSerializer
时间: 2024-10-14 14:11:59

django-rest-framework学习之Class-based Views--2017年4月13日的相关文章

关于开源金融计算学习的总结(截至2017年1月3日)

本文在Creative Commons许可证下发布 开源金融计算,源自开源数值计算.实际上需要学习以下内容就可以应对金融计算了. 1.Linux/Unix基本命令,2.Shell基本编程(这可能会花你一天时间),最好除了shell编程之外至少学一种脚本语言(建议Perl或Python).3.再根据你的需要选学下面某种数学分析软件:R,Scilab,Octave,C/C++(虽然不是"软件",但是做金融数学的人多半都用它写算法,不少投行.证券的研究部也在用它.有时候你遇到用上面的软件处理

学习笔记之工厂模式-2017年1月11日23:00:53

当做日记流水来写吧. 今天看的工厂模式和抽象工厂. 设计原则: 依赖倒置原则:不依赖具体类,依赖抽象. 工厂方法模式:定义了一个创建对象的接口,但由子类来决定要实例化的类是哪一个.工厂方法让类吧实例化推迟到子类.NYPizzaStore继承自->PizzaStore.中有一个CreatPizza().中来创建对应的pizza. 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类.如创建披萨原料的产品家族(包括蔬菜,酱料等等),把原料家族实现为抽象工厂,然后对应的Pi

php 学习路线 赵兴壮2014年4月28 日 加油

第一阶段 第一讲,WEB基础     1.1 网站基本知识: 1.2 网络协议介绍: 1.3 B/S与C/S结构的区别: 1.4 WEB编程.网站开发技术介绍.      第二讲,网页设计     2.1 Dreamweaver介绍及使用: 2.2 静态网页HTML语言: 2.3 标题与段落,换行与分割线: 2.4 表格.表单: 2.5 框架.超链接.图片.     实例:1,使用表格进行网页布局设计: 2,使用表单.表格.框架进行系统后台界面设计. 第三讲,DIV+CSS     3.1 CS

2017年3月30日上午学习日志

2017年3月30日上午复习了高等数学,学习高等数学教材书第二章第一节导数概念,并按照自己的思路记笔记,并背英语单词及其语法.

2017年 1月 15日 指针 学习整理

有关指针的概念: 指针是一个特殊的变量,它里面存储的数值被解释为内存里的一个地址. FIrst of all:我们需要明确目标 关于指针的学习以及使用我们需要搞清楚有关指针的四个内容:指针的类型,指针所指向的类型,指针的值(或者说叫指针所指向的内存区),还有指针本身所占用的内存区(指针也是一个特殊的变量吗,它肯定也是占据内存的).接下来让我们分别进行学习. 我们先来申明几个指针的例子: 1 int *ptr; 2 char *ptr; 3 int **ptr; 4 int (*ptr)[3];

2017年8月9日学习内容存放 #socket通信介绍

2017年8月9日学习内容存放 1 #socket通信介绍 2 3 ''' 4 OSI七层 5 6 应用 7 表示 8 会话 9 传输 10 网络 ip 11 数据链路 mac 12 物理层 网线 13 14 15 16 http 17 smtp 18 dns 19 ftp 20 ssh 21 snmp 22 icmp ping 23 dhcp 24 25 26 27 发 send 28 收 receive 29 30 31 32 33 TCP/IP 三次握手,四次断开 34 35 UDP 36

微信小程序开发视频教程学习(第6天)2017年6月29日:上午前端下午PHP

学习内容 上午前端:CSS学习 下午PHP:  系统函数 笔记 1.CSS优先级顺序 行内样式 > 内部样式 > 导入样式 说明: 1.链入外部样式表和内部样式表的优先级取决于所处位置的先后 2.根据就近原则(最后定义的优先级最高) 2.链接伪类的顺序,按照这个顺序才是有效的 :Link  >  :Visited  > :Hover >:Active 3.PHP的字符串函数 ucfirst() //将句子的首字母转换为大写 ucwords() //将句子的每个单词替换为大写

Python学习日志9月13日

p { margin-bottom: 0.25cm; line-height: 120% } 昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比win7要好看很多,很舒服,下个软件却要设置java的环境变量,而我连java是什么玩意都不知道.思维导图不能用了,又得想别的办法,对我来说这是非常重要的工具啊.简直没有它无法从事脑力活动. 因为前天晚上也

Html标记语言学习一2017年6月12日

今天主要学习了 frame的用法. <frameset> 可以将网页分成几个不同的部分 使用 cols  和  rows 两种标记.前者是列,后者是行 <frame/>  单标记 使用src属性展示另外一个页面的内容