Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django Rest Framework(分页、视图、路由、渲染器)

Django Rest Framework(分页、视图、路由、渲染器)

作者头像
用户1214487
发布于 2022-03-26 06:21:31
发布于 2022-03-26 06:21:31
1.3K00
代码可运行
举报
文章被收录于专栏:PythonPython
运行总次数:0
代码可运行

一、分页

试问如果当数据量特别大的时候,你是怎么解决分页的?

  • 方式a、记录当前访问页数的数据id
  • 方式b、最多显示120页等
  • 方式c、只显示上一页,下一页,不让选择页码,对页码进行加密

1、基于limit offset 做分页(如:在url后面加上?offset=0&limit=2,即代表从第0条开始,往后取2条(即1,2))

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.pagination import LimitOffsetPagination
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 urlpatterns = [
2     url(r'^admin/', admin.site.urls),
3     url(r'^app01/(?P<version>[v1|v2]+)/', include('app01.urls'))
4 
5 ]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 urlpatterns = [
2     url(r'^index1/', views.IndexView1.as_view()),
3     url(r'^index2/', views.IndexView2.as_view()),
4     url(r'^index3/', views.IndexView3.as_view()),
5     url(r'^index4/', views.IndexView4.as_view()),
6     url(r'^index5/', views.IndexView5.as_view()),
7 
8 ]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.views import APIView
from rest_framework.response import Response
from app01.serializes.myserializes import MySerializes
from rest_framework.pagination import LimitOffsetPagination
from app01 import models

# =========== 可以自己进行自定制分页,基于limitoffset===================
class P1(LimitOffsetPagination):
    max_limit = 3  # 最大显示3条数据,当取的条数超过3条时,只显示前3条,不会再显示后面的,这个值默认是None,即不做限制
    default_limit =2  # 设置每一页显示多少条
    limit_query_param = 'limit'  # 往后取几条
    offset_query_param = 'offset'  # 当前所在的位置

class IndexView2(APIView):
    #使用http://127.0.0.1:8080/app01/v1/index2/?offset=2&limit=4可进行判断
    def get(self,request,*args,**kwargs):
        user_list = models.UserInfo.objects.all()
        p1 = P1()#注册分页
        page_user_list = p1.paginate_queryset(queryset=user_list,request=request,view=self)
        print('打印的是分页的数据',page_user_list)
        ser = MySerializes(instance=page_user_list,many=True)  #可允许多个
        # return Response(ser.data) #不含上一页下一页
        return p1.get_paginated_response(ser.data)

=======================也可以用下面这种形式===========
class BaseResponse(object):
    def __init__(self,code=1000,data=None,error=None):
        self.code = code
        self.data = data
        self.error = error
class IndexView(views.APIView):
    '''第二种类表示的方式'''
    def get(self,request,*args,**kwargs):
        ret = BaseResponse()
        try:
            user_list = models.UserInfo.objects.all()
            p1 = P1()
            page_user_list = p1.paginate_queryset(queryset=user_list,request=request,view=self)
            ser = IndexSerializer(instance=page_user_list,many=True)
            ret.data = ser.data
            ret.next = p1.get_next_link() #下一页链接
        except Exception as e:
            ret.code= 1001
            ret.error = 'xxxx错误'
        return Response(ret.__dict__)

2、基于页码的分页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.pagination import PageNumberPagination
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ======================基于页码实现的分页==============
class P2(PageNumberPagination):
    #默认每页显示的数据条数
    page_size = 2
    #获取url参数中设置的每页显示数据条数
    page_size_query_param = 'size'
    #获取url中传入的页码key
    page_query_param = 'page'
    #最大支持的每页显示的数据条数
    max_page_size = 5

class IndexView3(APIView):
    #使用http://127.0.0.1:8080/app01/v1/index3/?page=1&page_size=1可进行判断
    def get(self,request,*args,**kwargs):
        user_list = models.UserInfo.objects.all()
        #实例化分页对象,获取数据库中的分页数据
        p2 = P2()
        print(p2.page_size_query_description)
        page_user_list = p2.paginate_queryset(queryset=user_list,request=request,view=self)
        print('打印的是分页的数据',page_user_list)

        #序列化对象
        ser = MySerializes(instance=page_user_list,many=True)  #可允许多个

        #生成分页和数据
        # return Response(ser.data) #不含上一页下一页
        return p2.get_paginated_response(ser.data) # 是Response对象,有上一页下一页

3、基于Cursor的分页

2可能存在性能问题,如果用户吧page给改的很大,查询速度就会很慢。还有一种页码加密的方式,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 # =====================基于Cursor的分页============
 2 class P3(CursorPagination):
 3     # URL传入的游标参数
 4     cursor_query_param = 'cursor'
 5     # 默认每页显示的数据条数
 6     page_size = 2
 7     # URL传入的每页显示条数的参数
 8     page_size_query_param = 'size'
 9     # 每页显示数据最大条数
10     max_page_size = 3
11 
12     # 根据ID从大到小排列
13     ordering = "id"
14     
15 class IndexView4(APIView):
16     #使用http://127.0.0.1:8080/app01/v1/index4/?cursor=cj0xJnA9NA%3D%3D&size=3可进行判断
17     def get(self,request,*args,**kwargs):
18         user_list = models.UserInfo.objects.all().order_by('-id')
19         p3 = P3()#注册分页
20         page_user_list = p3.paginate_queryset(queryset=user_list,request=request,view=self)
21         print('打印的是分页的数据',page_user_list)
22         ser = MySerializes(instance=page_user_list,many=True)  #可允许多个
23         # return Response(ser.data) #不含上一页下一页
24         return p3.get_paginated_response(ser.data)

二、视图

写视图函数可继承的几个类,我们以前经常用到的是APIView,现在我们来了解一下其他的类,其中1、3、4用到的最多

需要导入的类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.views import APIView
from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import GenericViewSet
from rest_framework.viewsets import ModelViewSet

1、APIView

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 class IndexView2(APIView):
2     def get(self,request,*args,**kwargs):
3         user_list = models.UserInfo.objects.all()
4         ser = MySerializes(instance=user_list,many=True)
5         return Response(ser.data)

2、GenericAPIView(APIView)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 from rest_framework.response import Response
 2 from rest_framework.generics import GenericAPIView
 3 from app01 import models
 4 from app01.serializes.myserializes import MySerializes
 5 from rest_framework.pagination import LimitOffsetPagination
 6 class P1(LimitOffsetPagination):
 7     max_limit = 3  # 最大限制默认是None
 8     default_limit =2  # 设置每一页显示多少条
 9     limit_query_param = 'limit'  # 往后取几条
10     offset_query_param = 'offset'  # 当前所在的位置
11 
12 class IndexView1(GenericAPIView):
13     queryset = models.UserInfo.objects.all()
14     serializer_class = MySerializes
15     pagination_class = P1
16     def get(self,request,*args,**kwargs):
17         user_list = self.get_queryset()
18         p1 = P1()  #注册分页
19         data = p1.paginate_queryset(queryset=user_list,request=request,view=self)  #获取分页的数据
20         ser = self.get_serializer(instance=data,many=True) #序列化
21         return Response(ser.data)

3、 GenericViewSet(ViewSetMixin, generics.GenericAPIView)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
POST
    /users/DELETE
    /users/1/
改   #全部修改
    PUT
    /users/1/
    #局部修改
    patch
    /users/1/GET
    /users/ 
    GET
    /users/1/GET请求的时候如果带ID说明查一条,如果不带则查所有

原始的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 urlpatterns = [
2 
3     url(r'^index/$', views.IndexView.as_view()),
4     url(r'^index/(?P<pk>\d+)$', views.IndexView.as_view()),
5 ]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class IndexView(views.APIView):
 2 
 3     def get(self,request,*args,**kwargs):
 4         pk = kwargs.get('pk')
 5         if pk:
 6             pass # 获取单条信息
 7         else:
 8             pass # 获取列表信息
 9 
10     def post(self,request,*args,**kwargs):
11         pass
12 
13     def put(self,request,*args,**kwargs):
14         pass
15 
16     def patch(self,request,*args,**kwargs):
17         pass
18 
19     def delete(self,request,*args,**kwargs):
20                 pass

用了GenericViewSet这种方式的时候注意url变了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
urlpatterns = [
    url(r'^index3/$', views.IndexView3.as_view({'get': 'list','post':'create'})), #get方式执行list函数,post方式执行create函数
    url(r'^index3/(?P<pk>\d+)/$', views.IndexView3.as_view({'get': 'retrieve'})),    #get方式执行retrieve函数
  
]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class IndexView3(GenericViewSet):
 2     queryset = models.UserInfo.objects.all()
 3     serializer_class = MySerializes
 4     pagination_class = P1
 5 
 6     def list(self,request,*args,**kwargs):
 7         #获取列表信息
 8         return Response('...')
 9 
10     def retrieve(self,request,*args,**kwargs):
11         #获取单条数据
12         return Response('xxx')

4、 ModelViewSet(mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,mixins.ListModelMixin,GenericViewSet)

利用ModelViewSet增删改查不用自己写了,内部把增删改查都干了,当满足不了需求的时候我们也可以自定制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 urlpatterns = [
2 
3     url(r'^index4/', views.IndexView4.as_view({'get': 'list','post':'create'})),  #获取数据和添加数据
4     url(r'^index4\.(?P<format>[a-z0-9]+)/', views.IndexView4.as_view({'get': 'list','post':'create'})), #.json想让页面上显示成json格式
5     url(r'^index4/(?P<pk>\d+)/', views.IndexView4.as_view({'get': 'retrieve', 'delete': 'destroy','put':'partial_update'})), #查看单条,删除,修改数据
6     url(r'^index4(?P<pk>\d+)\.(?P<format>[a-z0-9]+)/', views.IndexView4.as_view({'get': 'retrieve', 'delete': 'destroy','put':'partial_update'})),
7 
8 ]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1  注意啦:用ModelSerializer这种方法必须要用IndexSerializer(ModelSerializer)这种方式序列化
 2 class P2(PageNumberPagination):
 3     page_size = 3  #每一页显示的条数
 4     page_query_param = 'page' #获取参数中传入的页码
 5     page_size_query_param = 'size' #获取url参数中每页显示的数据条数
 6 
 7     max_page_size = 5
 8 
 9 class IndexSerializer(ModelSerializer):
10     class Meta:
11         model = models.UserInfo
12         fields = "__all__"
13 
14 class IndexView4(ModelViewSet):
15     queryset = models.UserInfo.objects.all()
16     serializer_class = IndexSerializer
17     pagination_class = P2

自定制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class P2(PageNumberPagination):
 2     page_size = 3  #每一页显示的条数
 3     page_query_param = 'page' #获取参数中传入的页码
 4     page_size_query_param = 'size' #获取url参数中每页显示的数据条数
 5 
 6     max_page_size = 5
 7 
 8 class IndexSerializer(ModelSerializer):
 9     class Meta:
10         model = models.UserInfo
11         fields = "__all__"
12 
13 class IndexView4(ModelViewSet):
14     queryset = models.UserInfo.objects.all()
15     serializer_class = IndexSerializer
16     pagination_class = P2
17 
18     def list(self, request, *args, **kwargs):
19         '''获取get请求的所有'''
20         pass
21 
22     def retrieve(self, request, *args, **kwargs):
23         '''查看单条数据'''
24         pass
25     def destroy(self, request, *args, **kwargs):
26         '''删除DELETE'''
27         pass
28     def create(self, request, *args, **kwargs):
29         '''添加数据POST'''
30         pass
31     def update(self, request, *args, **kwargs):
32         '''全部修改PUT'''
33         pass
34     def partial_update(self, request, *args, **kwargs):
35         '''局部修改PATCH'''
36         pass

继承关系

三、路由

第一类:自定义路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# http://127.0.0.1:8000/api/v1/auth/
url(r'^auth/$', views.AuthView.as_view()),
# http://127.0.0.1:8000/api/v1/auth.json # 想要让页面显示json格式
url(r'^auth\.(?P<format>[a-z0-9]+)$', views.AuthView.as_view()),
# http://127.0.0.1:8000/api/v1/auth/1/
url(r'^auth/(?P<pk>\d+)/$', views.AuthView.as_view()),
# http://127.0.0.1:8000/api/v1/auth/1.json
url(r'^auth/(?P<pk>\d+)\.(?P<format>[a-z0-9]+)$', views.AuthView.as_view()),
class AuthView(views.APIView):

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

第二类:半自动路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url(r'^index/$', views.IndexView.as_view({'get':'list','post':'create'})),
url(r'^index\.(?P<format>[a-z0-9]+)$', views.IndexView.as_view({'get':'list','post':'create'})),
url(r'^index/(?P<pk>\d+)/$', views.IndexView.as_view({'get':'retrieve','delete':'destroy','put':'update','patch':'partial_update'})),
url(r'^index(?P<pk>\d+)\.(?P<format>[a-z0-9]+)$', views.IndexView.as_view({'get':'retrieve','delete':'destroy','put':'update','patch':'partial_update'})),

class IndexView(viewsets.ModelViewSet):
    queryset = models.UserInfo.objects.all()
    serializer_class = IndexSerializer
    pagination_class = P2

第三类:全自动路由,会自动生成四个url

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
router = DefaultRouter()
router.register('index',views.IndexViewSet)
urlpatterns = [
    url(r'^', include(router.urls)),
]


class IndexViewSet(viewsets.ModelViewSet):
    queryset = models.UserInfo.objects.all()
    serializer_class = IndexSerializer
    pagination_class = P2
    
    
    
class IndexSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserInfo
        fields = "__all__"

四、渲染器

根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件。 用户请求URL:

  • http://127.0.0.1:8000/test/?format=json
  • http://127.0.0.1:8000/test.json

用户请求头:

  • Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

1、. json

访问URL:

  • http://127.0.0.1:8000/test/?format=json
  • http://127.0.0.1:8000/test.json
  • http://127.0.0.1:8000/test/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 from django.conf.urls import url, include
2 from web.views import s11_render
3 
4 urlpatterns = [
5     url(r'^test/$', s11_render.TestView.as_view()),
6     url(r'^test\.(?P<format>[a-z0-9]+)', s11_render.TestView.as_view()),
7 ]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 from rest_framework.views import APIView
 4 from rest_framework.response import Response
 5 from rest_framework import serializers
 6 
 7 from rest_framework.renderers import JSONRenderer
 8 
 9 from .. import models
10 
11 
12 class TestSerializer(serializers.ModelSerializer):
13     class Meta:
14         model = models.UserInfo
15         fields = "__all__"
16 
17 
18 class TestView(APIView):
19     renderer_classes = [JSONRenderer, ]
20 
21     def get(self, request, *args, **kwargs):
22         user_list = models.UserInfo.objects.all()
23         ser = TestSerializer(instance=user_list, many=True)
24         return Response(ser.data)

2、.表格

访问URL:

  • http://127.0.0.1:8000/test/?format=admin
  • http://127.0.0.1:8000/test.admin
  • http://127.0.0.1:8000/test/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 from rest_framework.views import APIView
 4 from rest_framework.response import Response
 5 from rest_framework import serializers
 6 
 7 from rest_framework.renderers import AdminRenderer
 8 
 9 from .. import models
10 
11 
12 class TestSerializer(serializers.ModelSerializer):
13     class Meta:
14         model = models.UserInfo
15         fields = "__all__"
16 
17 
18 class TestView(APIView):
19     renderer_classes = [AdminRenderer, ]
20 
21     def get(self, request, *args, **kwargs):
22         user_list = models.UserInfo.objects.all()
23         ser = TestSerializer(instance=user_list, many=True)
24         return Response(ser.data)

3、 Form表单

访问URL:

  • http://127.0.0.1:8000/test/?format=form
  • http://127.0.0.1:8000/test.form
  • http://127.0.0.1:8000/test/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 from rest_framework.views import APIView
 4 from rest_framework.response import Response
 5 from rest_framework import serializers
 6 
 7 from rest_framework.renderers import JSONRenderer
 8 from rest_framework.renderers import AdminRenderer
 9 from rest_framework.renderers import HTMLFormRenderer
10 
11 from .. import models
12 
13 
14 class TestSerializer(serializers.ModelSerializer):
15     class Meta:
16         model = models.UserInfo
17         fields = "__all__"
18 
19 
20 class TestView(APIView):
21     renderer_classes = [HTMLFormRenderer, ]
22 
23     def get(self, request, *args, **kwargs):
24         user_list = models.UserInfo.objects.all().first()
25         ser = TestSerializer(instance=user_list, many=False)
26         return Response(ser.data)

4、 自定义显示模板

访问URL:

  • http://127.0.0.1:8000/test/?format=html
  • http://127.0.0.1:8000/test.html
  • http://127.0.0.1:8000/test/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 from django.conf.urls import url, include
2 from web.views import s11_render
3 
4 urlpatterns = [
5     url(r'^test/$', s11_render.TestView.as_view()),
6     url(r'^test\.(?P<format>[a-z0-9]+)', s11_render.TestView.as_view()),
7 ]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 from rest_framework.views import APIView
 4 from rest_framework.response import Response
 5 from rest_framework import serializers
 6 from rest_framework.renderers import TemplateHTMLRenderer
 7 
 8 from .. import models
 9 
10 
11 class TestSerializer(serializers.ModelSerializer):
12     class Meta:
13         model = models.UserInfo
14         fields = "__all__"
15 
16 
17 class TestView(APIView):
18     renderer_classes = [TemplateHTMLRenderer, ]
19 
20     def get(self, request, *args, **kwargs):
21         user_list = models.UserInfo.objects.all().first()
22         ser = TestSerializer(instance=user_list, many=False)
23         return Response(ser.data, template_name='user_detail.html')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8     {{ user }}
 9     {{ pwd }}
10     {{ ut }}
11 </body>
12 </html>

5、浏览器格式API+JSON

访问URL:

  • http://127.0.0.1:8000/test/?format=api
  • http://127.0.0.1:8000/test.api
  • http://127.0.0.1:8000/test/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 from rest_framework.views import APIView
 4 from rest_framework.response import Response
 5 from rest_framework import serializers
 6 
 7 from rest_framework.renderers import JSONRenderer
 8 from rest_framework.renderers import BrowsableAPIRenderer
 9 
10 from .. import models
11 
12 
13 class TestSerializer(serializers.ModelSerializer):
14     class Meta:
15         model = models.UserInfo
16         fields = "__all__"
17 
18 
19 class CustomBrowsableAPIRenderer(BrowsableAPIRenderer):
20     def get_default_renderer(self, view):
21         return JSONRenderer()
22 
23 
24 class TestView(APIView):
25     renderer_classes = [CustomBrowsableAPIRenderer, ]
26 
27     def get(self, request, *args, **kwargs):
28         user_list = models.UserInfo.objects.all().first()
29         ser = TestSerializer(instance=user_list, many=False)
30         return Response(ser.data, template_name='user_detail.html')

注意:如果同时多个存在时,自动根据URL后缀来选择渲染器。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django rest framework(7)----分页
第一种分页  PageNumberPagination 基本使用 (1)urls.py urlpatterns = [ re_path('(?P<version>[v1|v2]+)/page1
zhang_derek
2018/04/11
1.8K0
Django rest framework(7)----分页
ElementUI 分页+django rest framework
在之前的文章中,链接如下:https://www.cnblogs.com/xiao987334176/p/14313471.html
py3study
2021/03/29
1.8K0
ElementUI 分页+django rest framework
Django rest-framework视图家族
总结:GenericAPIView就是在APIView基础上额外提供了三个方法和三个类属性,如果不配合视图工具类,则体现不出来优势所在
GH
2020/01/14
8520
Django rest framework源码分析(4)----版本
版本  新建一个工程Myproject和一个app名为api (1)api/models.py from django.db import models class UserInfo(models.Model): USER_TYPE = ( (1,'普通用户'), (2,'VIP'), (3,'SVIP') ) user_type = models.IntegerField(choices=USER_TYPE) usern
zhang_derek
2018/04/11
1K0
Django rest framework源码分析(4)----版本
Django rest framework(6)----序列化
序列化 1.继承Serializer 基本使用  (1)models.py from django.db import models class UserInfo(models.Model): USER_TYPE = ( (1,'普通用户'), (2,'VIP'), (3,'SVIP') ) user_type = models.IntegerField(choices=USER_TYPE) username = mode
zhang_derek
2018/04/11
9780
Django rest framework(6)----序列化
rest_framework之解析器、路由控制、分页
解析器 我们都知道,网络传输数据只能传输字符串格式的,如果是列表、字典等数据类型,需要转换之后才能使用 但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framework有一套解析器, 默认他会帮我们转换3种类型的数据,分别是,JSONParser,FormParser,MultiPartParser 而如果我们需要转换其他数据,需要在视图类里配置parser_classes参数,如下: from rest_framework.parsers import JSO
人生不如戏
2018/05/30
5070
Django REST framework+Vue 打造生鲜超市(四)
五、商品列表页 5.1.django的view实现商品列表页 (1)goods/view_base.py 在goods文件夹下面新建view_base.py,为了区分django和django rest framework的view 利用Django的view实现返回json数据 # goods/view_base.py from django.views.generic import View from goods.models import Goods class GoodsListView(Vie
zhang_derek
2018/04/11
5K0
Django REST framework+Vue 打造生鲜超市(四)
day93-视图封装&路由组件&版本控制
1.1 首先明确封装,因为不同的增删改查的区别就在于 表 不同,序列化器 不同,
少年包青菜
2020/03/05
4330
Python进阶41-drf框架(三)
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
6580
Python进阶41-drf框架(三)
Django REST framework 的快速入门教程
创建一个新的Django项目,叫做 tutorial,然后开始一个新的app叫做 quickstart。
菲宇
2019/06/13
1.6K0
Django-djangorestframework-渲染模块
入口 dispatch 中的 self.response = self.finalize_response(request, response, *args, **kwargs)
suwanbin
2019/12/12
7490
Django-djangorestframework-渲染模块
【微信小程序+Python后台从0到1实战开发】06微信小程序新闻发布及(restful)API调用
day07 功能 1.发布 1.1 小程序 1.2 API from rest_framework.views import APIView from rest_framework.generics import CreateAPIView from rest_framework import serializers from apps.api import models class NewsDetailModelSerializer(serializers.Serializer): key = s
天道Vax的时间宝藏
2021/08/11
7650
Django Rest Framework(认证、权限、限制访问频率)
上述操作中均是对单独视图进行特殊配置,如果想要对全局进行配置,则需要再配置文件中写入即可。
用户1214487
2022/03/26
3.1K0
Django Rest Framework(认证、权限、限制访问频率)
Django rest Framework入门 四 :视图
在Django rest Framework入门 二 :DRF框架初体验中其实已经使用了视图了(book.views里面的代码),而且就是实际开发中最常用的模式,但是那是经过DRF框架高度封装的,代码的可读性不好,而且如果不了解里面的细节,当以后遇到需要定制化的工作时可能就无从下手,这一篇笔记会记录一些我自己认为比较重要切常用的实现细节。
panzhixiang
2024/10/30
2800
Django Rest Framework(版本、解析器、序列化、数据验证)
为了这种情况下每次都要decode,loads,显得麻烦,所以才有的解析器。弥补了django的缺点
用户1214487
2022/03/26
2.4K0
Django Rest Framework(版本、解析器、序列化、数据验证)
从入门到"精通"Django REST Framework-(五)
GenericAPIView 是 Django REST Framework (DRF) 中的一个基础视图类,它继承自 APIView,并添加了一些常用的功能,特别是与数据库模型交互的功能。它是 DRF 中通用视图和视图集的基础,提供了查询、序列化、分页等常用操作的标准实现。本质上它是 DRF 中所有通用视图(如 ListAPIView、RetrieveAPIView 等)的基础。
rxg456
2025/03/01
4630
从入门到"精通"Django REST Framework-(五)
3. DRF进阶之DRF视图和常用功能
APIView:DRF提供的所有视图的基类,继承View并扩展,具备了身份认证、权限检查、流量控制等功能
alexhuiwang
2023/01/16
5.4K0
drf分页器
也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_clas属性来指明。例如:
仙人技术
2020/07/14
8991
Django rest framework源码分析(1)----认证
一、基础 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一些知识 理解下面两个知识点非常重要,django-rest-framework源码中到处都是基于CBV和面向对象的封装 (1)面向对象封装的两大特性 把同一类方法封装到类中 将数据封装到对象中 (2)CBV 基于反射实现根据请求方式不同,执行不同的方法 原理:url-->view方法-->dispatch方法(反射执行其它方法:GET/POST/P
zhang_derek
2018/04/11
2.2K0
Django rest framework源码分析(1)----认证
rest_framework框架的基本组件
快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式。我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现。 models部分: from django.db import models # Create your models here. class Book(models.Model): title=mod
阿强Wwlt
2018/07/09
9480
推荐阅读
相关推荐
Django rest framework(7)----分页
更多 >
交个朋友
加入[数据] 腾讯云技术交流站
获取数据实战干货 共享技术经验心得
加入[后端] 腾讯云技术交流站
后端架构设计 高可用系统实现
加入数据技术工作实战群
获取实战干货 交流技术经验
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验