rest_framework之视图

写一个出版社的增删改查restful接口

models

 1 from django.db import models
 2
 3 # Create your models here.
 4
 5
 6 from django.db import models
 7
 8
 9 # Create your models here.
10
11
12 class Book(models.Model):
13     title = models.CharField(max_length=32)
14     price = models.IntegerField()
15     pub_date = models.DateField()
16     publish = models.ForeignKey("Publish")
17     authors = models.ManyToManyField("Author")
18
19     def __str__(self):
20         return self.title
21
22     def test(self):
23         return ‘555‘
24
25
26 class Publish(models.Model):
27     name = models.CharField(max_length=32)
28     email = models.EmailField()
29     # def __str__(self):
30     #     return self.name
31
32
33 class Author(models.Model):
34     name = models.CharField(max_length=32)
35     age = models.IntegerField()
36
37     def __str__(self):
38         return self.name

视图

 1 from django.shortcuts import render, HttpResponse
 2 # Book相关操作
 3 # Create your views here.
 4 from api import models
 5 from rest_framework.response import Response
 6 from rest_framework.views import APIView
 7 from rest_framework import serializers
 8
 9
10 class BookSer(serializers.ModelSerializer):
11     class Meta:
12         model = models.Book
13         fields = "__all__"
14
15
16 class List():
17     def list(self):
18         ret = self.ret.objects.all()
19         ser = self.book_ser(instance=ret, many=True)
20         return Response(ser.data)
21
22
23 class Create():
24     def create(self, request):
25         back_msg = {‘status‘: 0, ‘data‘: None, ‘msg‘: ‘error happened‘}
26         ser = BookSer(data=request.data)
27         if ser.is_valid():
28             ser.save()
29             back_msg[‘data‘] = ser.data
30             back_msg[‘status‘] = 1
31             back_msg[‘msg‘] = ‘create success‘
32         return Response(back_msg)
33
34
35 class Book(APIView, List, Create):
36     ret = models.Book
37     book_ser = BookSer
38
39     def get(self, request):
40         return self.list()
41
42     def post(self, request):
43         return self.create(request)
44
45
46 class BookDetail(APIView):
47     def get(self, request, pk):
48         ret = models.Book.objects.filter(pk=pk).first()
49         ser = BookSer(instance=ret, many=False)
50         return Response(ser.data)
51
52     def put(self, request, pk):
53         ret = models.Book.objects.filter(pk=pk).first()
54         ser = BookSer(instance=ret, data=request.data)
55         if ser.is_valid():
56             ser.save()
57             return Response(ser.data)
58
59     def delete(self, request, pk):
60         models.Book.objects.filter(pk=pk).delete()
61         return HttpResponse(‘already deleted‘)

mixin类和generice类编写视图

 1 from rest_framework.mixins import CreateModelMixin,RetrieveModelMixin,ListModelMixin,UpdateModelMixin,DestroyModelMixin
 2 from rest_framework.generics import GenericAPIView
 3 class PublishView(ListModelMixin,CreateModelMixin,GenericAPIView):
 4     queryset=models.Publish.objects.all()
 5     serializer_class=PublishSerializers
 6
 7     def get(self, request):
 8         return self.list(request)
 9
10     def post(self, request):
11         return self.create(request)
12
13 class PublishDetailView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
14     queryset=models.Publish.objects.all()
15     serializer_class=PublishSerializers
16     def get(self,request,*args,**kwargs):
17         return self.retrieve(request,*args,**kwargs)
18     def put(self,request,*args,**kwargs):
19         return self.update(request,*args,**kwargs)
20     def delete(self,request,*args,**kwargs):
21         return self.destroy(request,*args,**kwargs)

使用generics 下ListCreateAPIView,RetrieveUpdateDestroyAPIView

from rest_framework.generics import ListCreateAPIView,RetrieveUpdateDestroyAPIView
class PublishView(ListCreateAPIView):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

class PublishDetailView(RetrieveUpdateDestroyAPIView):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

使用ModelViewSet

路由

 url(r‘^publish/$‘, views.PublishView.as_view({‘get‘:‘list‘,‘post‘:‘create‘})),
    url(r‘^publish/(?P<pk>\d+)/$‘, views.PublishView.as_view({‘get‘:‘retrieve‘,‘put‘:‘update‘,‘delete‘:‘destroy‘})),

视图

from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
    queryset=models.Publish.objects.all()
    serializer_class=PublishSerializers

原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9794840.html

时间: 2024-08-30 18:33:30

rest_framework之视图的相关文章

Django的rest_framework的视图之基于通用类编写视图源码解析

我们上一篇博客讲解了如何使用mixins类实现rest_framework的视图,但是其中有很多的冗余的代码,我们这边在来优化一下 1.queryset的视图函数 首先看下对queryset操作的视图类是怎么写的 from rest_framework import mixins from rest_framework import generics class Auther_view(generics.ListCreateAPIView): queryset = models.Auther.o

Django的rest_framework的视图之基于ModelViewSet视图源码解析

前言 今天一直在整理Django的rest_framework的序列化组件,前面一共写了2篇博客,前面的博客给的方案都是一个中间的状态的博客,其中有很多的冗余的代码,如果有朋友不清楚,可以先看下我前面的博客 第一篇,使用minix类来实现序列化和反序列化 https://www.cnblogs.com/bainianminguo/p/10463741.html 第二篇,使用通用的类的方法实现序列化和反序列化 https://www.cnblogs.com/bainianminguo/p/1046

Django的rest_framework的视图之Mixin类编写视图源码解析

Mixin类编写视图 我们这里用auther表来做演示,先为auther和autherdetail写2个url url(r'^autherdetail/(?P<id>\d+)', views.Book_detail_cbv.as_view(), name="autherdetail"), url(r'^auther/', views.Book_cbv.as_view(),name="auther"), 然后分别为这2个类写对应的序列化的类 class a

rest_framework框架视图

再看源码之前我们需要先思考一个问题 self是谁? 因为能执行到这个get请求 就说明有人访问了该url 所以我们要去url里找self是什么 搞清楚self是什么我们继续来源码 而那两个方法是在GenericAPIView里 我们点进去看啊看n 默认的都是空的,所以我们用自己定义的 最后 将view返回整个流程就完成了 注意:启动的时候 只是返回view函数名变量 而触发url的时候 才是真正调用view函数 原文地址:https://www.cnblogs.com/yftzw/p/94095

django rest_framework入门四-类视图APIView

上节,我们使用函数视图,用了@api_view装饰器来修饰,这一节,我们介绍类视图APIView,显然,类视图更符合面向对象的原则. 1.使用类视图APIView重写API 类视图APIView,取代@api_view装饰器,代码如下: from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from snippe

django framework插件类视图方法

1.使用类视图APIView重写API 类视图APIView,取代@api_view装饰器,代码如下: from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from snippets.models import Snippet from snippets.serializers import SnippetSe

Nginx多进程高并发、低时延、高可靠机制在缓存代理中的应用

1. 开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemproxy无法利用多核特性,因此性能低下,短连接QPS大约为3W,长连接QPS大约为13W,同时某些场景时延抖动厉害. 为了适应公有云平台上业务方的高并发需求,因此决定借助于twemproxy来做二次开发,把nginx的高性能.高可靠.高并发机制引入到twemproxy中,通过master+多work

Django Book

The Django Book 2.0--中文版 第一章:介绍Django 本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 从好的方面来看,Web 开发激动人心且富于创造性:从另一面来看,它却是份繁琐而令人生厌的工作. 通过减少重复的代码,Django 使你能够专注于 Web 应用上有 趣的关键性的东西. 为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程

Django中rest_framework的APIView,序列化组件和视图组件

url urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^books/$', views.BookHandle.as_view()), url(r'^books/(\d+)', views.GetBookHandle.as_view()), url(r'^publishs/$', views.PublishHandel.as_view()), ] views #####################################