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

Django REST framework 視圖和路由詳解

 更新時間:2019年07月19日 16:18:54   作者:zpf666  
這篇文章主要介紹了Django REST framework 視圖和路由詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

DRF中的Request

在Django REST Framework中內(nèi)置的Request類擴(kuò)展了Django中的Request類,實現(xiàn)了很多方便的功能--如請求數(shù)據(jù)解析和認(rèn)證等。

比如,區(qū)別于Django中的request從request.GET中獲取URL參數(shù),從request.POST中取某些情況下的POST數(shù)據(jù)。

在APIView中封裝的request,就實現(xiàn)了請求數(shù)據(jù)的解析:

對于GET請求的參數(shù)我們通過request.query_params來獲取。

對于POST請求、PUT請求的數(shù)據(jù)我們通過request.data來獲取。

前提

序列化

from rest_framework import serializers
from app01 import models


class CommentSerializer(serializers.ModelSerializer):
  class Meta:
    model = models.Comment
    fields = "__all__"
    extra_kwargs = {
      "content": {"error_messages": {"required": "評論內(nèi)容不能為空"}},
      "article": {"error_messages": {"required": "文章不能為空"}}
    }


class SchoolSerializer(serializers.ModelSerializer):
  class Meta:
    model = models.School
    fields = "__all__"

第一階段:手壘代碼

視圖

from rest_framework.views import APIView
class SchoolView(APIView):
  def get(self, request, *args, **kwargs):
    query_set = models.School.objects.all()
    ser_obj = app01_serializers.SchoolSerializer(query_set, many=True)
    return Response(ser_obj.data)


class SchoolDetail(APIView):
  def get(self, request, pk, *args, **kwargs):
    obj = models.School.objects.filter(pk=pk).first()
    ser_obj = app01_serializers.SchoolSerializer(obj)
    return Response(ser_obj.data)

第二階段:簡單使用rest formwork自帶混合類方法

視圖

from rest_framework.generics import GenericAPIView # 公共類
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin # 混合類 必須與公共類搭配著使用

class SchoolView(GenericAPIView, mixins.ListModelMixin): # 查看學(xué)校列表
  queryset = models.School.objects.all()
  serializer_class = app01_serializers.SchoolSerializer

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


class SchoolDetail(GenericAPIView, mixins.RetrieveModelMixin, mixins.CreateModelMixin): # 創(chuàng)建,與具體查出某一條記錄
  queryset = models.School.objects.all()
  serializer_class = app01_serializers.SchoolSerializer

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

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

路由

url(r'school/$', views.SchoolView.as_view()),
url(r'school/(?P<pk>\d+)/$', views.SchoolDetail.as_view()),

第三階段:使用rest formwork自帶的通用類方法

視圖

from rest_framework.generics import GenericAPIView, ListCreateAPIView, RetrieveUpdateAPIVie
class SchoolView(ListCreateAPIView): # 創(chuàng)建
  queryset = models.School.objects.all()
  serializer_class = app01_serializers.SchoolSerializer


class SchoolDetail(RetrieveUpdateDestroyAPIView): # 更新
  queryset = models.School.objects.all()
  serializer_class = app01_serializers.SchoolSerializer

路由同上

第四階段:使用rest formwork自帶的封裝所有放的類,代碼量最少,功能最全

視圖

from rest_framework.viewsets import ModelViewSet # 里面封裝了操作的所有方法,增刪改查查
class SchoolView(ModelViewSet):
  queryset = models.School.objects.all()
  serializer_class = app01_serializers.SchoolSerializer

路由

url(r'school/$', views.SchoolView.as_view(actions={
  "get": "list",
  "post": "create",
})),
url(r'school/(?P<pk>\d+)/$', views.SchoolView.as_view(actions={
  'get': 'retrieve',
  'put': 'update',
  'patch': 'partial_update',
  'delete': 'destroy'
})),

高級路由

視圖

同上

路由

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'school', views.SchoolView)
urlpatterns += router.urls

精華:流程圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python Tornado 實現(xiàn)SSE服務(wù)端主動推送方案

    Python Tornado 實現(xiàn)SSE服務(wù)端主動推送方案

    SSE是Server-Sent Events 的簡稱,是一種服務(wù)器端到客戶端(瀏覽器)的單項消息推送,本文主要探索兩個方面的實踐一個是客戶端發(fā)送請求,服務(wù)端的返回是分多次進(jìn)行傳輸?shù)?直到傳輸完成,這種情況下請求結(jié)束后,考慮關(guān)閉SSE,所以這種連接可以認(rèn)為是暫時的,感興趣的朋友一起看看吧
    2024-01-01
  • 在python中實現(xiàn)對list求和及求積

    在python中實現(xiàn)對list求和及求積

    今天小編就為大家分享一篇在python中實現(xiàn)對list求和及求積,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Keras 加載已經(jīng)訓(xùn)練好的模型進(jìn)行預(yù)測操作

    Keras 加載已經(jīng)訓(xùn)練好的模型進(jìn)行預(yù)測操作

    這篇文章主要介紹了Keras 加載已經(jīng)訓(xùn)練好的模型進(jìn)行預(yù)測操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python實現(xiàn)的幾個常用排序算法實例

    Python實現(xiàn)的幾個常用排序算法實例

    這篇文章主要介紹了Python實現(xiàn)的幾個常用排序算法實例例如直接插入排序、直接選擇排序、冒泡排序、快速排序等,需要的朋友可以參考下
    2014-06-06
  • python3.5 cv2 獲取視頻特定幀生成jpg圖片

    python3.5 cv2 獲取視頻特定幀生成jpg圖片

    這篇文章主要為大家詳細(xì)介紹了python3.5 cv2 獲取視頻特定幀生成jpg圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Python中深拷貝與淺拷貝的區(qū)別介紹

    Python中深拷貝與淺拷貝的區(qū)別介紹

    這篇文章介紹了Python中深拷貝與淺拷貝的區(qū)別,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Django中如何防范CSRF跨站點請求偽造攻擊的實現(xiàn)

    Django中如何防范CSRF跨站點請求偽造攻擊的實現(xiàn)

    這篇文章主要介紹了Django中如何防范CSRF跨站點請求偽造攻擊的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python實現(xiàn)定制交互式命令行的方法

    python實現(xiàn)定制交互式命令行的方法

    這篇文章主要介紹了python實現(xiàn)定制交互式命令行的方法,需要的朋友可以參考下
    2014-07-07
  • python中end=" "的含義及說明

    python中end=" "的含義及說明

    這篇文章主要介紹了python中end=" "的含義及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python中的for循環(huán)

    python中的for循環(huán)

    Python for循環(huán)可以遍歷任何序列的項目,如一個列表或者一個字符串。這篇文章主要介紹了python的for循環(huán),需要的朋友可以參考下
    2018-09-09

最新評論

澄江县| 加查县| 都江堰市| 光山县| 繁昌县| 怀柔区| 根河市| 大渡口区| 横山县| 五原县| 巴彦淖尔市| 古浪县| 东阿县| 英山县| 石棉县| 永仁县| 江口县| 榕江县| 灯塔市| 肃南| 丹阳市| 顺平县| 永泰县| 鸡泽县| 苏尼特左旗| 教育| 揭东县| 永新县| 观塘区| 资源县| 武川县| 孝昌县| 大兴区| 香港 | 保靖县| 越西县| 麦盖提县| 锡林郭勒盟| 黔东| 开封市| 江华|