多种view视图和序列化--django2
models.py
from django.db import models # Create your models here.
class Idc(models.Model):
name = models.CharField("机房名称",max_length=)
address = models.CharField("机房地址",max_length=)
phone = models.CharField("联系人",max_length=)
email = models.EmailField("邮件地址",default="null")
letter = models.CharField("IDC简称",max_length=) def __str__(self):
return self.name class Meta:
db_table = 'resources_idc'
models.py
serializers.py
from rest_framework import serializers
from .models import Idc class IdcSerializer(serializers.Serializer):
"""
Idc 序列化类
"""
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(required=True, max_length=32)
address = serializers.CharField(required=True, max_length=256)
phone = serializers.CharField(required=True, max_length=15)
email = serializers.EmailField(required=True)
letter = serializers.CharField(required=True, max_length=5) #必须有create,才能使用save(), data={...} a=IdcSerializer(data=data) a.save()
def create(self, validated_data):
return Idc.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get("name", instance.name)
instance.address = validated_data.get("address", instance.address)
instance.phone = validated_data.get("phone", instance.phone)
instance.email = validated_data.get("email", instance.email)
instance.save()
return instance
serializers.py
版本一 :APIView
自己写get、post等方法
urlpatterns = [
url("^$", views.api_root),
url("^idcs/$", views.IdcList.as_view(), name="idc-list"),
url("^idcs/(?P<pk>[0-9]+)/$", views.IdcDetail.as_view(), name="idc_detail")
]
urlpatterns = format_suffix_patterns(urlpatterns)
from rest_framework.views import APIView
from django.http import Http404 class IdcList(APIView):
def get(self, request, format=None):
queryset = Idc.objects.all()
serializer = IdcSerializer(queryset, many=True)
return Response(serializer.data) def post(self, request, format=None):
serializer = IdcSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.data, status=status.HTTP_400_BAD_REQUEST) class IdcDetail(APIView): def get_object(self, pk):
try:
return Idc.objects.get(pk=pk)
except Idc.DoesNotExist:
raise Http404 def get(self, request, pk, format=None):
idc = self.get_object(pk)
serializer = IdcSerializer(idc)
return Response(serializer.data) def put(self, request, pk, format=None):
idc = self.get_object(pk)
serializer = IdcSerializer(idc, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND) def delete(self, request, pk, format=None):
idc = self.get_object(pk)
idc.delete()
return HttpResponse(status=status.HTTP_204_NO_CONTENT)
版本二:使用混合类(generics.GenericAPIView+mixins.RetrieveModelMixin)实现
需要自己重复写get、post方法,因为ListModelMixin没有写get方法
from rest_framework import generics
from rest_framework import mixins class IdcList_V4(generics.GenericAPIView,
mixins.ListModelMixin,
mixins.CreateModelMixin):
queryset = Idc.objects.all()
serializer_class = IdcSerializer def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class IdcDetail_V4(generics.GenericAPIView,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin):
queryset = Idc.objects.all()
serializer_class = IdcSerializer def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
版本三:viewset(viewsets.GenericViewSet+mixins)扩展实现
将所有请求用一个class实现,如:GenericViewSet+ListModelMixin
get请求绑定到list之上,post绑定到create
########################## 版本六 ############################
from rest_framework import viewsets class IdcListViewset(viewsets.GenericViewSet,
mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
mixins.UpdateModelMixin,
mixins.CreateModelMixin):
queryset = Idc.objects.all()
serializer_class = IdcSerializer
urls.py绑定参数:
idc_list = views.IdcListViewset.as_view({
"get": "list",
"post": "create"
})
idc_detail = views.IdcListViewset.as_view({
"get": "retrieve",
"put": "update",
"delete": "destroy"
})
urlpatterns = [
#url("^$", views.api_root),
url("^idcs/$", idc_list, name="idc-list"),#此时,url中不需要再加as_view()了
url("^idcs/(?P<pk>[0-9]+)/$", idc_detail, name="idc_detail")
]
或者用router实现自动绑定get 和list,create 和 post等等
from rest_framework.routers import DefaultRouter # 导入
from django.urls import path
#实例化router
router = DefaultRouter()
# 注册idc
router.register(r'idc', IdcListViewset, base_name="idcs")
urlpatterns = [
# router的path路径
path('', include(router.urls)),
]
版本四:使用高级混合(generics.ListCreateAPIView等)实现
父类包含具体请求方式,如:ListCreateAPIView包括了get

urlpatterns = [
url("^$", views.api_root),
url("^idcs/$", views.IdcList_V5.as_view(), name="idc-list"),
url("^idcs/(?P<pk>[0-9]+)/$", views.IdcDetail_V5.as_view(), name="idc_detail")
]
urlpatterns = format_suffix_patterns(urlpatterns)
from rest_framework import generics
class IdcList_V5(generics.ListCreateAPIView):#包括查找和创建
queryset = Idc.objects.all()
serializer_class = IdcSerializer
class IdcDetail_V5(generics.RetrieveUpdateDestroyAPIView): #包括 详细查找 、更新和删除
queryset = Idc.objects.all()
serializer_class = IdcSerializer
版本五: ModelViewSet(router)实现:
整合:ModelViewSet包括所有方法
########################## 版本七 ############################
from rest_framework.routers import DefaultRouter route = DefaultRouter()
route.register("idcs", views.IdcViewset_v7)
urlpatterns = [
url(r'^', include(route.urls))
]
class IdcViewset_v7(viewsets.ModelViewSet):
queryset = Idc.objects.all()
serializer_class = IdcSerializer
多种view视图和序列化--django2的更多相关文章
- Django的View(视图)和路由系统
一.Django的View(视图) 1.介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一 ...
- 8、ASP.NET MVC入门到精通——View(视图)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...
- NET MVC 升级到5.1后,View视图中代码报错
使用nuget将项目中MVC4 升级到MVC5,之后项目还可以正常编译运行, 但View视图中相关的很多代码都报错,比如: 1.@model找不到 2.@Html找不到,本该是System.Web.M ...
- Django框架 之 view视图
Django框架 之 view视图 浏览目录 概述 简单的视图 HttpRequest对象 CBV和FBV 给视图加装饰器 Request对象 Response对象 JsonResponse对象 Dj ...
- DNS主从服务,子域授权,view视图,日志系统,压力测试
DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记
当我们的应用电量不足的时候,就需要警告提示,那么我们可以用Alert View视图 实现:
- view视图文件中的input等输入框必须含有name属性,不然控制器里的动作formCollection是没有值的
view视图文件中的input等输入框必须含有name属性,不然控制器里的动作formCollection是没有值的,就是没有name属性,后台获取不到值
- MVC(Model(模型) View(视图) Controller(控制器))
复习 1. 商品表 增删改查 index.php add.php view.php edit.php action.php 2. MVC(Model(模型) Vie ...
- ThinkPHP框架视图详细介绍 View 视图--模板(九)
原文:ThinkPHP框架视图详细介绍 View 视图--模板(九) 视图也是ThinkPHP使用的核心部分: 一.模板的使用 a.规则 模板文件夹下[TPL]/[分组文件夹/][模板主题文件夹/]和 ...
随机推荐
- [Agc029B]Powers of two_贪心_树形dp
Powers of two 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_b 数据范围:略. 题解: 可能一点思路都没有. 但是我们发现:如 ...
- 使用pycharm开发web——django2.1.5(四)视图和模板相关
刘老师说这块很重要..... 应该是很重要,大概看了一下,这里面关于views中函数作用,大概看来可能就是相应请求,传入数据和跳转,基本功能上貌似这些框架都差不多吧(其实我并没用过3个框架以上.... ...
- Linux中实用的命令
1. 查看linux机器是32位还是64位的方法: 1.file /sbin/init 或者file /bin/ls (注意命令中的空格) /sbin/init: ELF64- ...
- 【LOJ】#3051. 「十二省联考 2019」皮配
LOJ#3051. 「十二省联考 2019」皮配 当时我在考场上觉得这题很不可做... 当然,出了考场后再做,我还是没发现学校和城市是可以分开的,导致我还是不会 事实上,若一个城市投靠了某个阵营,学校 ...
- Markdown Note
Markdown-Note 1.基本编辑 粗体和斜体 源代码: *斜体*或_斜体_ **粗体** ***加粗斜体*** ~~删除线~~ 显示效果: 斜体或_斜体_ 粗体 加粗斜体 删除线 分级标题 第 ...
- PHP学习之PHP的语法糖
PHP的语法糖 计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用. 常见的PHP的语法糖 echo(),print(),die(),isset(),unset(),i ...
- go的命令行参数
package main import ( "fmt" "os" ) func main() { var s, sep string for i := 1; i ...
- 【思维】ABC
题目描述 You are given a string s consisting of A, B and C.Snuke wants to perform the following operatio ...
- linux安装字体库(simSun为例)
在开发过程中,发现报表打印,字体和默认字体不一样.本地开发环境(windows)没问题,但是远程linux一直出现这样的问题.经过排查发现linux没有安装中文字体库宋体. linux查看当前的字体库 ...
- windows系统 MySQL8.0.12详细安装步骤及基本使用教程
转载 https://blog.csdn.net/xiezhiming1234/article/details/82860339