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