阅读 257

django 视图(Django视图中的按钮获取click事件)

一、简介

django rest framework 给我们带来了很多组件,除了认证、权限、序列化...其中一个重要组件就是视图,一般视图是和路由配合使用,这种方式给我们提供了更灵活的使用方法,对于使用者而言不同的视图具有不同的功能,这样我们可以根据需求定制自己视图。以下是官网传送门:www.django-rest-framework.org/api-guide/v…

在之前的文章中,由于参杂了权限、认证等(如果不了解请看博客的以前的文章),但在本章中基本可以不使用,所进使用以下简单模型进行说明:

settings中注册django rest framework

INSTALLED_APPS = [     'django.contrib.admin',     'django.contrib.auth',     'django.contrib.contenttypes',     'django.contrib.sessions',     'django.contrib.messages',     'django.contrib.staticfiles',     'app01.apps.App01Config',     'rest_framework', ] 复制代码

models.py

from django.db import models # Create your models here. class UserInfo(models.Model):     username = models.CharField(max_length=32,unique=True)     password = models.CharField(max_length=64) 复制代码

urls.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'^api/v1/users', views.UerView.as_view()),   ] 复制代码

二、各类视图使用

1.APIView

该视图是最基本的视图,之前的章节中已经介绍如何使用

2.GenericAPIView

该视图为我们封装一些静态字段,用于调用其他组件,示例(解释请看注解):

from django.shortcuts import render # Create your views here. from rest_framework.response import Response from rest_framework.generics import GenericAPIView from rest_framework import serializers from rest_framework import pagination from app01 import models class Userserializer(serializers.ModelSerializer):   #序列化类定义,前面章节已经介绍     class Meta:         model = models.UserInfo         fields = '__all__'  #序列化字段 class Mypagination(pagination.PageNumberPagination):  # 分页类定义,前面章节也已经介绍     """自定义分页"""     page_size=2  #默认每页显示个数配置     page_query_param = 'p' # 页面传参的key,默认是page     page_size_query_param='size'  # 指定每页显示个数参数     max_page_size=4 # 每页最多显示个数配置,使用以上配置,可以支持每页可显示2~4条数据 class UerView(GenericAPIView):            #视图     queryset = models.UserInfo.objects.all()  #数据的queryset     serializer_class = Userserializer         # 序列化类使用     permission_classes = []                   # 权限认证,这里不做认证,前面章节也有介绍权限     pagination_class = Mypagination #分页类,前面章节也已经介绍     def get(self,*args,**kwargs):         roles=self.get_queryset()  # 获取queryset,实际取queryset,也就是models.UserInfo.objects.all()         page_res=self.paginate_queryset(queryset=roles)  #分页结果         res=self.get_serializer(instance=page_res,many=True)  #序列化         return Response(res.data)  #返回结果 复制代码

访问http://127.0.0.1:8000/api/v1/users   ,查看结果如下:

3.GenericViewSet

该视图类需要和路由配合使用,修改后的urls.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'^api/v1/users', views.UserView.as_view()),     url(r'^api/v2/users', views.UserView.as_view({'get':'show','post':'create'})), #重写as_view方法,并对请求方法进行映射 ] 复制代码

views.py

from django.shortcuts import render # Create your views here. from rest_framework.response import Response from rest_framework.generics import GenericAPIView from rest_framework import serializers from rest_framework import pagination from rest_framework.viewsets import GenericViewSet from app01 import models class Userserializer(serializers.ModelSerializer):   #序列化类定义,前面章节已经介绍     class Meta:         model = models.UserInfo         fields = '__all__'  #序列化字段 class Mypagination(pagination.PageNumberPagination):  # 分页类定义,前面章节也已经介绍     """自定义分页"""     page_size=2  #默认每页显示个数配置     page_query_param = 'p' # 页面传参的key,默认是page     page_size_query_param='size'  # 指定每页显示个数参数     max_page_size=4 # 每页最多显示个数配置,使用以上配置,可以支持每页可显示2~4条数据 class UserView(GenericViewSet):            #视图     queryset = models.UserInfo.objects.all()  #数据的queryset     serializer_class = Userserializer         # 序列化类使用     permission_classes = []                   # 权限认证,这里不做认证,前面章节也有介绍权限     pagination_class = Mypagination #分页类,前面章节也已经介绍     def show(self,*args,**kwargs):  #与url中映射的方法名称相同         roles=self.get_queryset()  # 获取queryset,实际取queryset,也就是models.UserInfo.objects.all()         page_res=self.paginate_queryset(queryset=roles)  #分页结果         res=self.get_serializer(instance=page_res,many=True)  #序列化         return Response(res.data)  #返回结果     def create(self,*args,**kwargs):         pass 复制代码

访问http://127.0.0.1:8000/api/v2/users  ,结果和上面结果一样如图:

4.ModelViewSet

modelViewSet继承了mixins.CreateModelMixin、mixins.RetrieveModelMixin、mixins.UpdateModelMixin、mixins.DestroyModelMixin、mixins.ListModelMixin、GenericViewSet所以它有很父类的所有功能,而这些父类分别提供创建、获取、更新、删除等方法,所以我们不需要写增删该查,视图已经帮我实现了,示例:

此时路由urls.py

""" resetful URL Configuration The `urlpatterns` list routes URLs to views. For more information please see:     https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views     1. Add an import:  from my_app import views     2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home') Class-based views     1. Add an import:  from other_app.views import Home     2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home') Including another URLconf     1. Import the include() function: from django.conf.urls import url, include     2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls')) """ from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [     url(r'^admin/', admin.site.urls),     url(r'^api/v1/users$', views.UserView.as_view({'get':'list','post':'create'})),     #路由,retrieve、delete、create、update、partial_update,在UserView的父类全部实现,其中pk参数必须携带,想当于key,类可操作     url(r'^api/v1/users/(?P<pk>\d+)$', views.UserView.as_view({'get':'retrieve','delete':'destroy','post':'create','put':'update','patch':'partial_update'})), ] 复制代码

视图views.py

from django.shortcuts import render # Create your views here. from rest_framework.response import Response from rest_framework.generics import GenericAPIView from rest_framework import serializers from rest_framework import pagination from rest_framework.viewsets import ModelViewSet from app01 import models class Userserializer(serializers.ModelSerializer):   #序列化类定义,前面章节已经介绍     class Meta:         model = models.UserInfo         fields = '__all__'  #序列化字段 class Mypagination(pagination.PageNumberPagination):  # 分页类定义,前面章节也已经介绍     """自定义分页"""     page_size=2  #默认每页显示个数配置     page_query_param = 'p' # 页面传参的key,默认是page     page_size_query_param='size'  # 指定每页显示个数参数     max_page_size=4 # 每页最多显示个数配置,使用以上配置,可以支持每页可显示2~4条数据 class UserView(ModelViewSet):            #视图     queryset = models.UserInfo.objects.all()  #数据的queryset     serializer_class = Userserializer         # 序列化类使用     permission_classes = []                   # 权限认证,这里不做认证,前面章节也有介绍权限     pagination_class = Mypagination #分页类,前面章节也已经介绍 复制代码

访问http://127.0.0.1:8000/api/v1/users/1 ,查看多增删改。


作者:等到的等待
链接:https://juejin.cn/post/7031818318084472863


文章分类
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐