view > views.APIView > generics.GenericAPIView > viewsets.GenericViewSet

1.APIView(继承 view)官方范例:

  class GoodsList(APIView): 
   """
    List all snippets, or create a new snippet.
   """
def get(self, request, format=None):
     Goods = Snippet.objects.all()
  serializer = GoodsSerializer(Goods, many=True)
  return Response(serializer.data)

重写get(),指定模型,并序列化(serializer)

serializer:

class GoodsSerializer(serializers.Serializer):  # 类似与form的功能,但是能序列化为json
name = serializers.CharField(required=True, max_length=100)
click_num = serializers.IntegerField(default=0)

使用serializers.ModelSerializer:

# serializers.ModelSerializer 继承serializers.serializers(可不要指明每个字段,在fields里添加就好了)
class GoodsSerializer(serializers.ModelSerializer): # 类似与form的功能,但是能序列化为json
category = CategorySerializer() # 嵌套外键,获取外键的全部信息,注意CategorySerializer已定义
images = GoodsImageSerializer(many=True)

2.使用上层的generics.GenericAPIView:

在generics.GenericAPIView(view,views.APIView也是 )要重写get(),post()等方法,如果不重写表明不接受GET,POST等方法
覆盖内置变量queryset,serializer_class,get()调用了list是在mixins.ListModelMixin当中的,此函数帮助我们分页,
调用serializer完成序列化

class GoodsListView(mixins.ListModelMixin, generics.GenericAPIView):
"""
  商品列表页
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
更简单的方法:generics帮我们封装好了一些方法可以直接用:

可以直接使用ListAPIView,因为已经帮我们填入了mixins.ListModelMixin和GenericAPIView:
class ListAPIView(mixins.ListModelMixin,
GenericAPIView):
"""
Concrete view for listing a queryset.
"""
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)

上边的代码改为:

class GoodsListView(generics.ListAPIView):
"""
  商品列表页
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer

分页设置:在setting中设置:

 REST_FRAMEWORK = {   # rest-framework的配置
'PAGE_SIZE': 10, # 分页配置
}

自定义分页配置:

class GoodsPagination(PageNumberPagination):  # 定制分页设置
page_size = 12
page_size_query_param = 'page_size'
page_query_param = "page"
max_page_size =

字段引用:

pagination_class = GoodsPagination

更更好用的ViewSet:
class SnippetList(APIView): """ List all snippets, or create a new snippet. """ def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) return Response(serializer.data)

作者:天涯明月笙
链接:https://www.jianshu.com/p/6a6fa62d8152
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

class SnippetList(APIView): """ List all snippets, or create a new snippet. """ def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) return Response(serializer.data)

作者:天涯明月笙
链接:https://www.jianshu.com/p/6a6fa62d8152
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

class SnippetList(APIView): """ List all snippets, or create a new snippet. """ def get(self, request, format=None): snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) return Response(serializer.data)

作者:天涯明月笙
链接:https://www.jianshu.com/p/6a6fa62d8152
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


继承了ViewSetMixin, generics.GenericAPIView,也就是加了ViewSetMixin中的方法
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 as
the `get_object` and `get_queryset` methods.
"""
pass

ViewSetMixin部分代码:
class ViewSetMixin(object):
@classonlymethod
def as_view(cls, actions=None, **initkwargs):

重写as_view使得注册URL变得更简单!

使用router:

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

router自动把GET,POST等绑定

自定义绑定:

goods_list = GoodsListViewSet.as_view({
'get': 'list',
})
url(r'goods/$', goods_list, name='goods-list'),

4.queryset为得到所有的模型,要是想要筛选则要使用:
def get_queryset(self):
  return Goods.object.filter(shop_price__get=100) 返回大于100的商品
那么queryset = Goods.objects.all()就不需要了 5,minxin:
 
 

关于django-rest-freamwork中的View的更多相关文章

  1. Django中的View视图讲解

    Django中的View视图(view.py)是负责处理用户请求和返回响应的逻辑. 视图函数或视图简而言之就是一个python函数,它接受一个web请求并返回一个Web响应. 此响应可以是网页的HTM ...

  2. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  3. Django 1.10中文文档—第一个Django应用Part1

    在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点: 一个可以进行增删改查的后台admin管理界面: 我们假设你已经安装了Django.您可以 ...

  4. Django模板语言与视图(view)

    常用语法 {{  }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...

  5. Django 框架篇(四) : 视图(view)详解 以及 路由系统(url)

    |--Django的View(视图) |-- CBV和FBV: |-- 给视图增加装饰器: |-- request对象: |-- response对象: |-- Django的路由系统(url): | ...

  6. django drf框架中的user验证以及JWT拓展的介绍

    登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...

  7. <Django> MVT三大块之view(视图)

    1.视图简介 作用:接受web请求,返回web响应 本质:一个函数,定义在views.py文件中(定义在其他地方也行,约定俗成) 流程:(如果匹配不到,报一个404错误)-----结果返回http r ...

  8. Python的Django REST框架中的序列化及请求和返回

    Python的Django REST框架中的序列化及请求和返回 序列化Serialization 1. 设置一个新的环境 在我们开始之前, 我们首先使用virtualenv要创建一个新的虚拟环境,以使 ...

  9. Django之ORM中事务和锁

    ORM事务: 事务: 数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 事务的特点: 并非任意的对数据库的操作序列都是数据库事务.数据库事务拥有以下四 ...

  10. Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)

    Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用) 1.1. Keyword1 1.2. 前言1 2. Java项目使用.Net的aspx页面view1 ...

随机推荐

  1. C指针乱谈(1)

    写了几年的C指针几乎没怎么用过,因为感觉没什么用.不过在听了一位老师讲课之后,我改变的我的想法. 在此稍做总结,希望能帮到一些和我有同样想法的人,希望看完这篇文章后能改变您的想法. 首先,说说概念,指 ...

  2. Linux 平台和 Windows平台下 Unicode与UTF-8互转

    Windows: unsigned char * make_utf8_string(const wchar_t *unicode) { , index = , out_index = ; unsign ...

  3. Mybatis使用generator自动生成的Example类使用OR条件查询

    参考:https://blog.csdn.net/qq_36614559/article/details/80354511 public List<AssetsDevicetypeRefacto ...

  4. [CF1019C]Sergey's problem[构造]

    题意 找出一个集合 \(Q\),使得其中的点两两之间没有连边,且集合中的点可以走不超过两步到达其他所有不在集合中的点.输出任意一组解. \(n\leq 10^6\) 分析 考虑构造,先从 \(1\) ...

  5. 测试开发:Python+Django实现接口测试工具

    Python+Django接口自动化 引言: 最近被几个公司实习生整自闭了,没有基础,想学自动化又不知道怎么去学,没有方向没有头绪,说白了其实就是学习过程中没有成就感,所以学不下去.出于各种花里胡哨的 ...

  6. manjaro安装软件

    fcitx 安装以下包 fcitx-googlepinyin kcm-fcitx 安装了输入法之后,还要在/etc/profile或~/.xprofile里添加如下内容: export GTK_IM_ ...

  7. 详细聊聊k8s deployment的滚动更新(一)

    一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 二.环境准备 组件 版本 OS Ubuntu 18.04.1 LTS docker 18.06.0-ce 三.准备镜像 首先准备 ...

  8. 加速github、kaggle访问、加速python packge下载更改源

    OS: WIN10 加速github.kaggle访问 使用站长DNS工具(http://tool.chinaz.com/dns) 查询响应速度最快的网站服务器IP,将网站服务器IP和域名添加到电脑h ...

  9. Celery基本使用

    Celery 什么是Celery? Celery是一种简单/高效/灵活的即插即用的分布式任务队列. Celery应用场景? 需要异步处理的任务,发邮件/发短信/上传等耗时的操作.最终到达提升用户体验的 ...

  10. .net转PHP从零开始-配置visual studio 2013 PHP开发环境php for visual studio

    作为一个.net开发者,一直在visual studio这款强大的编辑器宠爱下,其他编辑器都不会用,也用着不熟练.最近这不是转php吗,使用php编辑器很不爽,觉得还是用visual studio舒服 ...