最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django框架之DRF 基于mixins來封裝的視圖詳解

 更新時間:2019年07月23日 09:14:22   作者:suguangti  
今天小編就為大家分享一篇Django框架之DRF 基于mixins來封裝的視圖詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

基礎(chǔ)視圖

示例環(huán)境搭建:新建一個Django項目,連接Mysql數(shù)據(jù)庫,配置路由、視圖函數(shù)、序列化單獨創(chuàng)建py文件

# 配置路由

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^PublishView/', views.PublishView.as_view()),
 url(r'^PublishDetailView/(?P<pk>\d+)', views.PublishDetailView.as_view()),

]
# 視圖:

from django.shortcuts import render
from rest_framework.views import APIView
from app01 import models
from app01.MySer import BookSer,PublishSer,AuthorSer
from rest_framework.response import Response
# Create your views here.
# 基本視圖

class PublishView(APIView):

 def get(self,request):
  publish_list = models.Publish.objects.all()
  bs = PublishSer(publish_list, many=True)
  return Response(bs.data)

 def post(self, request):
  bs = PublishSer(data=request.data)
  if bs.is_valid():
   bs.save()
   return Response(bs.data)
  else:
   return Response(bs.errors)

class PublishDetailView(APIView):
 def get(self, request, pk):
  publish_obj = models.Publish.objects.filter(pk=pk).first()
  bs = PublishSer(publish_obj, many=False)
  return Response(bs.data)

 def put(self, request, pk):
  publish_obj = models.Publish.objects.filter(pk=pk).first()
  bs = PublishSer(data=request.data, instance=publish_obj)
  if bs.is_valid():
   bs.save()
   return Response(bs.data)
  else:
   return Response(bs.data)

 def delete(self, request, pk):
  models.Publish.objects.filter(pk=pk).delete()
  return Response("")
# MySer.py

from rest_framework import serializers
from app01 import models

class BookSer(serializers.ModelSerializer):
 class Meta:
  model = models.Book
  fields = '__all__'


class PublishSer(serializers.ModelSerializer):
 class Meta:
  model = models.Publish
  fields = '__all__'


class AuthorSer(serializers.ModelSerializer):
 class Meta:
  model = models.Author
  fields = '__all__'

基于mixins來封裝的視圖

其它不變,更改視圖:

# 基于mixins來封裝的視圖
from rest_framework.mixins import CreateModelMixin,\
         ListModelMixin,\
         RetrieveModelMixin,\
         DestroyModelMixin,\
         UpdateModelMixin
from rest_framework.generics import GenericAPIView

class PublishView(CreateModelMixin, ListModelMixin, GenericAPIView):
 queryset = models.Publish.objects.all()
 serializer_class = PublishSer
 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 PublishDetailView(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, GenericAPIView):
 queryset = models.Publish.objects.all()
 serializer_class = PublishSer
 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)

可以看出視圖類中還是有很多冗余代碼

mixins封裝再封裝,第三種方法

# 第三種寫法:
from rest_framework.generics import CreateAPIView,\
         ListCreateAPIView,\
         DestroyAPIView,\
         RetrieveUpdateDestroyAPIView

class PublishView(ListCreateAPIView):
 queryset = models.Publish.objects.all()
 serializer_class = PublishSer

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

還是有冗余代碼

第四種寫法,再次封裝,全部寫在一個類中

# 路由
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
 url(r'^admin/', admin.site.urls),

 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'})),

]
# 第四種寫法:5個接口寫在一個類中
from rest_framework.viewsets import ModelViewSet
class PublishView(ModelViewSet):
 queryset = models.Publish.objects.all()
 serializer_class = PublishSer

補充:

from rest_framework.viewsets import ViewSetMixin
from rest_framework.views import APIView
# ViewSetMixin 重寫了as_view方法
class Test(ViewSetMixin,APIView):

 def aaa(self,request):
  return Response()

以上這篇Django框架之DRF 基于mixins來封裝的視圖詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳談Python中列表list,元祖tuple和numpy中的array區(qū)別

    詳談Python中列表list,元祖tuple和numpy中的array區(qū)別

    下面小編就為大家分享一篇詳談Python中列表list,元祖tuple和numpy中的array區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python入門教程(十二)Python列表

    Python入門教程(十二)Python列表

    這篇文章主要介紹了Python入門教程(十二)Python列表,Python是一門非常強大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件

    python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件

    這篇文章主要介紹了python如何寫入dbf文件內(nèi)容及創(chuàng)建dbf文件,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python 爬蟲多線程詳解及實例代碼

    Python 爬蟲多線程詳解及實例代碼

    這篇文章主要介紹了Python 爬蟲多線程詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Django自帶日志 settings.py文件配置方法

    Django自帶日志 settings.py文件配置方法

    今天小編就為大家分享一篇Django自帶日志 settings.py文件配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python中MySQLdb模塊用法實例

    python中MySQLdb模塊用法實例

    這篇文章主要介紹了python中MySQLdb模塊用法,以實例形式詳細講述了MySQLdb模塊針對MySQL數(shù)據(jù)庫的各種常見操作方法,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • 使用Python從零開始擼一個區(qū)塊鏈

    使用Python從零開始擼一個區(qū)塊鏈

    對數(shù)字貨幣的崛起感到新奇的我們,并且想知道其背后的技術(shù)——區(qū)塊鏈是怎樣實現(xiàn)的。這篇文章主要介紹了使用Python從零開始擼一個區(qū)塊鏈,需要的朋友可以參考下
    2018-03-03
  • 21行Python代碼實現(xiàn)拼寫檢查器

    21行Python代碼實現(xiàn)拼寫檢查器

    21行python代碼實現(xiàn)的一個簡易但是具備完整功能的拼寫檢查器,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Python中生成器和迭代器的區(qū)別詳解

    Python中生成器和迭代器的區(qū)別詳解

    這篇文章主要介紹了Python中生成器和迭代器的區(qū)別詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python網(wǎng)絡(luò)爬蟲之獲取網(wǎng)絡(luò)數(shù)據(jù)

    Python網(wǎng)絡(luò)爬蟲之獲取網(wǎng)絡(luò)數(shù)據(jù)

    本文介紹了Python中用于獲取網(wǎng)絡(luò)數(shù)據(jù)的重要工具之一——Requests庫,詳細講解了Requests庫的基本使用方法、請求方法、請求頭、請求參數(shù)、Cookies、Session等內(nèi)容,并結(jié)合實例代碼展示了Requests庫的應用場景
    2023-04-04

最新評論

小金县| 韶山市| 淳安县| 遂川县| 平乡县| 确山县| 资源县| 纳雍县| 柞水县| 临澧县| 信宜市| 怀来县| 通榆县| 兴和县| 利辛县| 温州市| 兴城市| 墨脱县| 廉江市| 潍坊市| 南康市| 中牟县| 益阳市| 嘉祥县| 河源市| 遂宁市| 鄯善县| 岗巴县| 沾化县| 原阳县| 城市| 弋阳县| 渑池县| 大同市| 怀远县| 额尔古纳市| 石家庄市| 元江| 井冈山市| 洛隆县| 白朗县|