zoukankan      html  css  js  c++  java
  • 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
    View Code

    视图

     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
  • 相关阅读:
    python 绘制所有线条、散点等 可用的标记符号(marker)
    Maximal InformMaximal Information Coefficient (MIC)最大互信息系数详解与实现 https://blog.csdn.net/FontThrone/article/details/85227239
    python画图,等间距坐标距离表示不等间距数据值
    机器学习数据库 http://archive.ics.uci.edu/ml/datasets.php https://www.openml.org/d/179
    Matplotlib.pyplot.plot图形符号、风格及颜色简写形式速查表https://blog.csdn.net/Treasure99/article/details/106044114/
    Pycharm 2017.3 永久激活教程https://www.bilibili.com/read/cv11643882/
    学习资源http://imada.huel.edu.cn/resource.html# 数据库/机器学习/安全领域顶会论文
    Python的知识点 plt.plot()函数细节
    原因是标题默认输出英文,如果输出中文,要对字体进行调整。需要在程序定义前输入:
    会讲故事助你成功
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9794840.html
Copyright © 2011-2022 走看看