日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django rest framework------得心应手

發布時間:2025/4/9 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django rest framework------得心应手 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Warninig:本文僅適用小白,老手請繞道

總共,分三步

對于一個從未接觸的新事物來說,我偏向于先看看他的外表,再一層一層扒掉它的外衣。

所以,這次,我們自頂向下的來看django rest framework是如何實現restful api的。

在django rest framework下提供restful api 總共分三步:

首先在viwe.py文件實現GoodsListViewSet如下:

from rest_framework import mixins from rest_framework import viewsetsclass GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):queryset = Goods.objects.all() # 獲取待返回數據的querysetserializer_class = GoodsSerializer # 指定序列化器

接著,在serilaizers.py文件中實現GoodsSerializer如下:

from rest_framework import serializers from goods.models import Goodsclass GoodsSerializer(serializers.ModelSerializer): class Meta:model = Goods fields = '__all__'

最后,在url.py文件中配置路由信息如下:

from rest_framework.documentation import include_docs_urls from rest_framework.routers import DefaultRouterrouter = DefaultRouter() router.register(r'goods', GoodsListViewSet, base_name="goods")urlpatterns = [url(r'^', include(router.urls)) ]

好了。

現在已經可以通過瀏覽器中輸入域名/goods 來獲取goods的所有數據了,以json格式展現。

django rest framework還為我們處理了json數據,以便更好的展示

?

然后呢?只是這樣嗎?

到底強大在哪里呢?

我也不知道,我覺得吧,這得結合具體的業務才能評判。

所以今天,我們來看下django rest framework到底是怎么實現restful api的

難道你們不好奇嗎。

?

還得從mixins.ListModelMixin和viewsets.GenericViewSet講起

?

通過各種類的層層繼承,django rest framework為我們做了很多事。

導致我們只需要繼承相應的類以及適當的重載某些特性,即可實現所需的功能

我們看到,在view.py文件中,GoodsListViewSet類本身并沒有指定任何方法來響應http請求

但是他繼承了兩個類。

我們先進入viewsets.GenericViewSet的定義看看:

class GenericViewSet(ViewSetMixin, generics.GenericAPIView):"""The GenericViewSet class does not provide any actions by default,but does include the base set of generic view behavior, such asthe `get_object` and `get_queryset` methods."""pass

啥也沒有,只是繼承了另外兩個類............

于是我們再來看下ViewSetMixin的定義:

class ViewSetMixin(object):"""This is the magic.Overrides `.as_view()` so that it takes an `actions` keyword that performsthe binding of HTTP methods to actions on the Resource.For example, to create a concrete view binding the 'GET' and 'POST' methodsto the 'list' and 'create' actions...view = MyViewSet.as_view({'get': 'list', 'post': 'create'})"""............

代碼有很多,我一行也沒考,但是從這個說明中以及可以看出一些東西了,下面,我用我CET6的水平為大家翻譯一下。

這是一個魔法(這么自戀?!)。

我們重寫了as_view(),實現了http請求到對資源的各種操作的綁定。

舉個栗子,我們將http的get,post請求分別綁定到了list,creat上去......

emmmmm,貌似有點明白了.......

但是list,creat方法又是在哪里實現的呢?

沒錯,正是mixins.ListModelMixin

class ListModelMixin(object):"""List a queryset."""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)

mixins.ListModelMixin實現了list操作,那么creat呢?

沒錯,是mixins.CreateModelMixin,實際上mixins.xxxxModelMixin共有5個,分別對應了不同的操作,需要時只要在類定義中繼承即可。

至此,邏輯已經很清楚了。

我再來看看那個不起眼的generics.GenericAPIView到底干了啥:

class GenericAPIView(views.APIView):"""Base class for all other generic views."""# You'll need to either set these attributes,# or override `get_queryset()`/`get_serializer_class()`.# If you are overriding a view method, it is important that you call# `get_queryset()` instead of accessing the `queryset` property directly,# as `queryset` will get evaluated only once, and those results are cached# for all subsequent requests.queryset = Noneserializer_class = None

同樣,我們只看說明。

他讓我們重置queryset 和serializer_class這兩個attributes,或者重載get_queryset()和get_serializer_class()這兩個方法

從名字中看的出來,是和序列化相關的。

所以我們明白了,GoodsListViewSet繼承了兩個類,一個指定了http請求的響應方法,一個指定了數據的序列化方法。

我們來看個結構圖:

完美~

?

?

?

?



?

轉載于:https://www.cnblogs.com/jiage666/p/9599683.html

總結

以上是生活随笔為你收集整理的django rest framework------得心应手的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 人善交videos欧美3d动漫 | 草草网址 | 波多野结衣亚洲一区二区 | 深夜视频一区二区三区 | 欧美另类videossexo高潮 | 中文字幕第66页 | 亚洲一区第一页 | 午夜精品在线视频 | 翔田千里一区 | 久久精彩视频 | 国产jk精品白丝av在线观看 | 日韩一道本 | 日本韩国毛片 | 欧美黄网在线观看 | 午夜男人影院 | 一区二区导航 | 枫可怜av | 亚洲AV无码片久久精品 | 日韩日日夜夜 | 亚洲精品国产精华液 | 欧美精品在线播放 | 亚洲视频精品在线观看 | 欧美在线一二三 | 欧美激情图区 | 日韩精品理论 | 1区2区视频 | 免看一级a毛片一片成人不卡 | 亚洲精品视频中文字幕 | 成人免费毛片网 | 樱花视频在线观看 | 日韩中文字幕国产 | 久久久久久成人精品 | 成人无码av片在线观看 | 国产精品免费视频观看 | 国产视频精品免费 | 亚洲爆乳无码一区二区三区 | 黄频在线 | 91大神网址 | 亚洲精品在线免费观看视频 | 久久精品无码一区二区三区免费 | 三级av网址 | 日韩欧美精品一区 | 天堂а√在线最新版中文在线 | 日韩av电影在线播放 | 粗大黑人巨茎大战欧美成人免费看 | 干干天天 | 日韩精品电影在线 | 91直接进入 | 老司机精品视频在线播放 | 午夜在线观看影院 | 韩国三级hd中文字幕叫床浴室 | 二级黄色片 | av片子在线观看 | 成人毛片网站 | 亚洲午夜精品久久久久久app | 日韩亚洲一区二区三区 | 成人h动漫在线 | 波多野结衣一区二区三区四区 | 亚洲图片欧美在线看 | 在线观看精品国产 | 国产视频手机在线播放 | 中文久久久 | 国产成人av一区二区 | 国产精品一区二 | free欧美性69护士呻吟 | 亚洲国产亚洲 | 精品久久久99 | 欧美日韩v| 香蕉免费在线视频 | 91网站在线看 | 啪啪自拍视频 | 温柔少妇的高潮呻吟 | 国产欧洲亚洲 | 一级黄色录像免费观看 | 精品人妻午夜一区二区三区四区 | 免费看a毛片 | 亚洲av日韩精品久久久久久久 | 国产色图片 | 国产又粗又猛又爽又黄无遮挡 | 少妇高潮一区二区三区在线 | 最全aⅴ番号库网 | 日韩超碰在线 | 日本黄色一级网站 | 深夜国产福利 | 欧美性xxxxxxxxx| 国产成人精品av | 精品女同一区二区 | 葵司有码中文字幕二三区 | 中文乱码人妻一区二区三区视频 | 青青草原免费观看 | 欧美一区二区三区成人久久片 | 欧美变态网站 | av中文字幕第一页 | 欧美人成在线视频 | 国产精品影院在线观看 | 国产喷白浆一区二区三区 | 91艹| 国产一区二区三区 | 国产一区精品久久 |